WinAPI на Builder'e
Как на Builder'е написать прогу на чистом WinAPI не используя никаких Builder'овских библиотек (но используя станартные Виндовские)?
File -> New... -> Other... -> ConsoleWizard
Галочки Use VCL, Use CLX (для BCB6), Concole Application не ставишь
Получаешь WinMain и делаешь с ним что хочет
File -> New... -> Other... -> ConsoleWizard
Галочки Use VCL, Use CLX (для BCB6), Concole Application не ставишь
Получаешь WinMain и делаешь с ним что хочет
Всё равно прога юзает Builder'овский CC3250MT.DLL
Я пробовал отключать Dynamic RTL и Build With Runtime Packages, но тогда раздувается ехе-шник, как же писать на ЧИСТОМ WinApi???
CC3250MT.DLL - это стандартная библиотека C++ для многопоточных приложений, пока ты пишешь на C++, от нее ты никак не избавишся.:)
Отключение Dynamic RTL приводит к включению ее в код exe-шника. Раздуваться сильно он от этого не должен.
Включение/Отключение Build With Runtime Packages не должно приводить к изменению размеров ехе-файла (в данном случае). Если есть подозрения, что используется что-то "лишнее", хорошо использовать утилиту Dependency Walker из MS VC. Если консольная программа написана на чистом API в списке зависимостей должен быть только Kernel32.dll (плюс CC3250.dll при dynamic RTL).
_ReZzZ_
CC3250MT.DLL - это стандартная библиотека C++ для многопоточных приложений, пока ты пишешь на C++, от нее ты никак не избавишся.:)
Что значит "стандартная библиотека"?
Я пишу на С++ (MS VC), ничего о таком стандарте не слышал :о)
_ReZzZ_
Если консольная программа написана на чистом API в списке зависимостей должен быть только Kernel32.dll (плюс CC3250.dll при dynamic RTL).
Это неверно, т.к. кроме kernel32.dll есть еще gdi32.dll и user32.dll
_ReZzZ_
CC3250MT.DLL - это стандартная библиотека C++ для многопоточных приложений, пока ты пишешь на C++, от нее ты никак не избавишся.:)
Отключение Dynamic RTL приводит к включению ее в код exe-шника. Раздуваться сильно он от этого не должен.
Включение/Отключение Build With Runtime Packages не должно приводить к изменению размеров ехе-файла (в данном случае). Если есть подозрения, что используется что-то "лишнее", хорошо использовать утилиту Dependency Walker из MS VC. Если консольная программа написана на чистом API в списке зависимостей должен быть только Kernel32.dll (плюс CC3250.dll при dynamic RTL).
Действительно, не замечал, что при компилляции в программу этой библиотеки (CC3250.dll) сильно раздувается код. Если нехочется видеть это имя в свой программе можно взять BC++5 или тот же MS VC (там скорее всего она по другому называется :-)) а если совсем чистый код то Borland TASM :-) Для примера я сравнивал программки создающие только окно и больше ничего - на BCB и BC++ весит примерно одинаково (~50к или 90, сейчас уже не помню) не думаю что это много, и не думаю что на MS VC получитс меньше, а на TASM - 8к, но вряд-ли стоит возиться, уж больно много мороки.
Действительно, не замечал, что при компилляции в программу этой библиотеки (CC3250.dll) сильно раздувается код. Если нехочется видеть это имя в свой программе можно взять BC++5 или тот же MS VC (там скорее всего она по другому называется :-)) а если совсем чистый код то Borland TASM :-) Для примера я сравнивал программки создающие только окно и больше ничего - на BCB и BC++ весит примерно одинаково (~50к или 90, сейчас уже не помню) не думаю что это много, и не думаю что на MS VC получитс меньше, а на TASM - 8к, но вряд-ли стоит возиться, уж больно много мороки.
1. В VC нет никаких CC3250.dll или т.п.
2. Программа, создающая только окно, на С++ должна "весить" не более 1кБ.
1. В VC нет никаких CC3250.dll или т.п.
2. Программа, создающая только окно, на С++ должна "весить" не более 1кБ.
1. Ну нет, так нет
2. А "должна" это она кому. Я говорю о том что я делал и сам видел. И если ты знаешь как написать код более компактный чем ассемблерный - то поделись, это будет полезная информация
3. А сколько весит программа только создающая окно (естественно говоря окно, и мею в виду также оконную процедуру) на VC без MFC и т.п.? неужели 1к ;-) NB я спросил не сколько она "должна весить" а сколько реально весит.
1. Ну нет, так нет
2. А "должна" это она кому. Я говорю о том что я делал и сам видел. И если ты знаешь как написать код более компактный чем ассемблерный - то поделись, это будет полезная информация
3. А сколько весит программа только создающая окно (естественно говоря окно, и мею в виду также оконную процедуру) на VC без MFC и т.п.? неужели 1к ;-) NB я спросил не сколько она "должна
весить" а сколько реально весит.
Подробно об этом уже сказанно, плагиатом заниматься не буду:
http://uinc.ru/articles/28/index.shtml
А про MFC и VCL могу сказать одно: они своё отжили. Будущее (пусть и недалекое) за WTL, что сам юзаю, то и другим советую.
Подробно об этом уже сказанно, плагиатом заниматься не буду:
http://uinc.ru/articles/28/index.shtml
А про MFC и VCL могу сказать одно: они своё отжили. Будущее (пусть и недалекое) за WTL, что сам юзаю, то и другим советую.
Ну ладно, посмотрел ссылку. Интересно, надо будет попробовать.
А WTL это что такое? и где можно почитать
Ну ладно, посмотрел ссылку. Интересно, надо будет попробовать.
А WTL это что такое? и где можно почитать
Порусски можно почитать на RSDN (http://rsdn.ru/):
Статьи -> WTL
Нужные контролы на WTL:
http://home.worldonline.dk/viksoe/all_wtl.htm
Также инфу можно найти на codeguru.com, codeproject.com, ну и на MS.
Это неверно, т.к. кроме kernel32.dll есть еще gdi32.dll и user32.dll
А еще есть advapi.dll, ole32.dll ....:)
Kernel32.dll - Это мининум, что ДОЛЖНА использовать Win32-программа, все остальное она может использовать по желанию.
Я пишу на С++ (MS VC), ничего о таком стандарте не слышал :о)
Плохо. Стандарт C++ кроме всего прочего включает в себя классы string, iostream, стандартные исключения типа exception, bad_alloc и пр. именно этот код и содержиться в cc3250.dll
В VC аналогичную роль играют msvcp60.dll и msvcrt.dll. Правда они подключаются, только когда в опциях генерации кода указано Multithread DLL. В остальных случаях код встраивается в exe-шник.
В принципе если использовать только голый API и чистый С, эти библиотеки не должны использоваться.
Green
А еще есть advapi.dll, ole32.dll ....:)
Kernel32.dll - Это мининум, что ДОЛЖНА использовать Win32-программа, все остальное она может использовать по желанию.
Смотря что считать "win32-программой"
kernel32.dll, gdi32.dll, user32.dll - три кита Win32API.
Green
Плохо. Стандарт C++ кроме всего прочего включает в себя классы string, iostream, стандартные исключения типа exception, bad_alloc и пр. именно этот код и содержиться в cc3250.dll
В VC аналогичную роль играют msvcp60.dll и msvcrt.dll. Правда они подключаются, только когда в опциях генерации кода указано Multithread DLL. В остальных случаях код встраивается в exe-шник.
В принципе если использовать только голый API и чистый С, эти библиотеки не должны использоваться.
Это тоже не совсем так. Перечисленные DLL имеют значение лишь при динамической линковке многопотоковых приложений, при статической же линковке они не требуются. И не "чистый API", не "чистый С" здесь ни при чем.
Кстати, что значит "чистый API" и "чистый С"?
Под API, надеюсь, подразумевается Win32API?
Кроме того разговор изначально шел в контексте С++, при чем тут С ?
Ну, это я уже придираюсь... :о)
Смотря что считать "win32-программой"
kernel32.dll, gdi32.dll, user32.dll - три кита Win32API.
Win32-программой считается программа, использующая функции API Win32. Что же еще !??
Киты они конечно киты, но я писал о МИНИМУМЕ.
В сообщении о "голом API и чистом C" я пытался сказать, что если не использовать всякие штучки из C++ вроде new, iostream, string, то линковщик вообще не должен использовать библиотеку C++, из-за которой собственно весь этот сыр-бор :).