Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C++ Builder разница между проектами, VCL и Console 
:(
    Опции темы
Riply
Дата 23.6.2008, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



Здравствуйте !
Попробовала сделать так:
В Builder выбираем File --> New --> VCL Forms Application.
Выбрасываем из проекта Unit1 и res.
В оставшемся Project1 чуть меняем код на:
Код

#include <sysutils.hpp>
#pragma hdrstop
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
if (IntToStr(9) == "ii") Beep(100, 100);
return 0;
}
Сохраняем и "билдим": все OK.

Теперь пытаемся тоже проделать с консольным проектом:
Выбираем File --> New --> Other --> Console Application
Опять чуть меняем код на:
Код

#include <sysutils.hpp>
#pragma hdrstop
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
if (IntToStr(9) == "ii") Beep(100, 100);
return 0;
}
и пытаемся "билдить".
И нам выдаются следующие ошибки:
[Linker Error] Error: Unresolved external 'System::__linkproc__ __fastcall LStrClr(void *)' referenced from C:\PROGRAM FILES\BORLAND\BDS\4.0\LIB\DEBUG\VCLE.LIB|dstring
[Linker Error] Error: Unresolved external '__fastcall Sysutils::IntToStr(int)' referenced from E:\DELETE FILES\CONSOL\DEBUG_BUILD\UNIT1.OBJ
[Linker Error] Error: Unresolved external 'System::__linkproc__ __fastcall LStrFromPChar(System::AnsiString&, char *)' referenced from C:\PROGRAM FILES\BORLAND\BDS\4.0\LIB\DEBUG\VCLE.LIB|dstring
[Linker Error] Error: Unresolved external 'System::__linkproc__ __fastcall LStrCmp()' referenced from C:\PROGRAM FILES\BORLAND\BDS\4.0\LIB\DEBUG\VCLE.LIB|dstring

Объясните мне, пожалуйста, в чем разница
и как консольный проект научить принимать, например, sysutils.hpp без ругани smile

PM MAIL   Вверх
mes
Дата 23.6.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Riply @  23.6.2008,  09:27 Найти цитируемый пост)
Unresolved external 'System::__

означает что есть вызов функции(класса) у которого нет тела. 
В вашем случае надо добавить нужные библиотеки к проекту. 



--------------------
PM MAIL WWW   Вверх
ama_kid
Дата 23.6.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 10
Всего: 95



Цитата(Riply @  23.6.2008,  09:27 Найти цитируемый пост)
как консольный проект научить принимать, например, sysutils.hpp без ругани
Поставить галку Project->Options->Packages->Build with runtime packages = True; 
Цитата(Riply @  23.6.2008,  09:27 Найти цитируемый пост)
Объясните мне, пожалуйста, в чем разница
Разница в том, что эта галка для VCL-приложений стоит автоматом...   smile 



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Riply
Дата 23.6.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



Спасибо всем !

Цитата(ama_kid @  23.6.2008,  10:48 Найти цитируемый пост)
Разница в том, что эта галка для VCL-приложений стоит автоматом


А ведь ни за что бы сама не догадалась  smile 

PM MAIL   Вверх
Riply
Дата 24.6.2008, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



Цитата(ama_kid @  23.6.2008,  10:48 Найти цитируемый пост)
Поставить галку Project->Options->Packages->Build with runtime packages = True; 


А как можно аналогичное проделать "вручную" ? Или это довольно сложно ?

P.S.
 На самом деле мне нужен не sysutils.hpp, а system.hpp
 Хочу поробовать "достать" из него MemoryManagerEx и сопутствующие ф-ии.


PM MAIL   Вверх
bsa
Дата 24.6.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Riply, может стоит воспользоваться Win32API напрямую?
Кстати, этот MemoryManagerEx упоминается только на этом форуме - больше нигде гугл не нашел. Может это неспроста?  smile 

Это сообщение отредактировал(а) bsa - 24.6.2008, 10:26
PM   Вверх
ama_kid
Дата 24.6.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 10
Всего: 95



Цитата(Riply @  24.6.2008,  06:08 Найти цитируемый пост)
А как можно аналогичное проделать "вручную" ?
Что значит "вручную"? Вроде бы и так ручнее некуда smile
Насчет MemoryManagerEx - соглашусь с bsa, не понимаю, зачем этот геморрой и откуда он взялся smile У меня билдер не знает такую функцию...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Riply
Дата 24.6.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



Цитата(bsa @  24.6.2008,  10:25 Найти цитируемый пост)
Кстати, этот MemoryManagerEx упоминается только на этом форуме - больше нигде гугл не нашел. Может это неспроста?


Может потому что искал именно MemoryManagerEx ?
На запрос TMemoryManagerEx что-то выдает smile Можно еще посмотреть TMemoryManager, но он устарел.

Цитата(bsa @  24.6.2008,  10:25 Найти цитируемый пост)
Riply, может стоит воспользоваться Win32API напрямую?


Не поняла, что имеется ввиду ? 
Я то просто хотела попробовать использовать вкусности от Borland-овского менеджера памяти в Builder`е smile

Добавлено через 3 минуты и 38 секунд
Цитата(ama_kid @  24.6.2008,  10:34 Найти цитируемый пост)
Насчет MemoryManagerEx - соглашусь с bsa, не понимаю, зачем этот геморрой и откуда он взялся


Из Delphi smile


PM MAIL   Вверх
ama_kid
Дата 24.6.2008, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 10
Всего: 95



Цитата(Riply @  24.6.2008,  06:08 Найти цитируемый пост)
 На самом деле мне нужен не sysutils.hpp, а system.hpp
 Хочу поробовать "достать" из него MemoryManagerEx и сопутствующие ф-ии.
Все равно не понимаю, что мешает... Ну вот я накидал код (смысла в нем я правда не вижу, но как пример)...
Код
#include <stdio.h>
#include <conio.h>
#include <system.hpp>
#pragma hdrstop
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
 TMemoryManagerEx MemMgr;
 MemMgr.AllocMem = (void* (_fastcall*)(int)) & AllocMem;
 MemMgr.FreeMem = (int (_fastcall *)(void *)) &FreeMemory;

 char *p = (char *)MemMgr.AllocMem(100);
 strcpy(p,"String long enough...");
 printf("%s",p);
 MemMgr.FreeMem(p);
 getch();
 return 0;
}
Вроде работает. Но в чем его вкусность - не вкурил smile



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Riply
Дата 24.6.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



Цитата(ama_kid @  24.6.2008,  11:05 Найти цитируемый пост)
Ну вот я накидал код (смысла в нем я правда не вижу, но как пример)...


Спасибо. Попробую.



Цитата(ama_kid @  24.6.2008,  11:05 Найти цитируемый пост)
Вроде работает. Но в чем его вкусность - не вкурил 


А ее (вкусности) в Builder`е может и не быть.
Я ведь в С++, сейчас нахожусь на уровне "обучения ставить точку с запятой перед else",
что мне дается с большим трудом, после Delphi smile

С чего-то же надо было начинать изучать язык. 
Вот я и решила начать с различных способов работы с памятью, ибо без нее (памяти) никуда smile

PM MAIL   Вверх
Riply
Дата 24.6.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



Цитата(ama_kid @  24.6.2008,  11:05 Найти цитируемый пост)
Ну вот я накидал код 


Только, IMHO, надо чуть чуть не так.
Код

int main(int argc, char* argv[])
{
  TMemoryManagerEx MemMgr;
  GetMemoryManager(MemMgr);
  char *p = (char *)MemMgr.AllocMem(100);
  strcpy(p, "String long enough...");
  printf("%s", p);
  MemMgr.FreeMem(p);
  getch();
  return 0;
}


Вроде работает.
Теперь можно попробовать сравнить с "настоящими" GetMem, AllocMem... e.t.c. smile
PM MAIL   Вверх
bsa
Дата 24.6.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Riply, кошмар. Зачем такие сложности?
чем тебя malloc/calloc/free или new/delete не устраивают?
Я уж не говорю про такие вкусности C++, как стандартные контейнеры (string, vector, list, set, map и пр.).
Твой код с их использованием можно написать так:
Код
#include <iostream> //нужен для std::cout и std::endl
#include <string> //нужен для std::string

int main()
{
    std::string text = "String long enough...";
    std::cout << text << std::endl;
//    getch(); //а это нестандартное расширение от Borland
    return 0;
}


Это сообщение отредактировал(а) bsa - 24.6.2008, 12:24
PM   Вверх
Riply
Дата 24.6.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



Цитата(bsa @  24.6.2008,  12:23 Найти цитируемый пост)
Riply, кошмар. Зачем такие сложности?
чем тебя malloc/calloc/free или new/delete не устраивают?


Вполне устраивают smile
Но надо же посмотреть и альтернативные варианты (если они конечно есть),
уяснить разницу и понять что с чем едят smile
PM MAIL   Вверх
bsa
Дата 24.6.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Riply, вот есть типичная тривиальная задача - выделить память под N элементов типа int. N на этапе компиляции неизвестна.
Как мы делаем в стандартном Си:
Код
int *array = (int*)malloc(sizeof(int)*N);
...
free(array);
Сложно и малопонятно с первого взгляда.
Как мы делаем под C++:
Код
int *array = new int[N];
...
delete []array;
Наглядней, но все равно надо следить за памятью.
Теперь тоже самое, но с использованием вектора:
Код
std::vector<int> array(N);
Просто и понятно, да и память сам за собой подчистит...

Все эти AllocMem'ы и пр. пришли из дельфи, который не имеет ничего подобного (если не ошибаюсь). Ну и зачем спрашивается пытаться заставить себя научиться работать с тем, что как минимум неудобно и небезопасно, а как максимум еще и медленней работает.

Это сообщение отредактировал(а) bsa - 24.6.2008, 13:22
PM   Вверх
Riply
Дата 24.6.2008, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



Цитата(bsa @  24.6.2008,  13:19 Найти цитируемый пост)
а как максимум еще и медленней работает


Одна из причин, почему все это затеяно -  подтверждение или опровержение этой фразы smile

P.S. 
 Пока нет доказательств, будем считать ее спорной smile

Добавлено через 4 минуты и 2 секунды
Цитата(bsa @  24.6.2008,  13:19 Найти цитируемый пост)
что как минимум неудобно и небезопасно


Ну это кому как. Я привыкла убирать за собой и не вижу в этом неудобств.
Да и плюсом считаю возможность чистить тогда, когда мне надо,
а не когда соизволит компилятор smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0942 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.