Билдер умер, да здравствует Дельфи 2006!
Вот бы ему еще правильную реализацию .NET - может даже Вирту понравилось бы.
В общем - пока сам не попробуешь эту прогу собрать по тому примеру который ты нашел сам, молчи ;)
И не надо говорить что "я и так умный".
А про startup - я еще раз повторяю, она ничего абсолютно не дает. Во всяком случае на VC 6.0. Если писать на чистом api.
А я еще раз повторю: "Вторая директива гарантированно отключает startup код" и добавлю: как и др. стандартные части.
Теперь от теории к практике.
Собери этот пример, посмотри на размер, попробуй запустить.
//#pragma comment(linker,"/NODEFAULTLIB")
#include <stdio.h>
int main()
{
printf("Hello");
return 0;
}
После этого раскоментируй вторую директиву и попробуй ещё раз построить.
Думаю, после этого буден наглядно понятно, для чего эта строка нужна.
Вопрос к тебе - ты пытался на VC скомилить этот код?
Я не просто пытался (и удачно) скомпилировать код из оригинальной статьи (http://www.uinc.ru/articles/28/index.shtml), но и применял эту методику для других программ, в частности я сделал WebBrowser на основе того кода, что приводил в теме "Браузер на Api" размером около 1кб.
Про первую директиву - я немого лажанулся :) Не без нее, но использовать ее по другому.
Обязатеьно раскрою сокральные данные, только ты сперва ответь на мой вопрос.
Ок жду ответа, в т.ч. как использовать её по другому.
P.S. Говорю без сарказма.
//#pragma comment(linker,"/NODEFAULTLIB")
#include <stdio.h>
int main()
{
printf("Hello");
return 0;
}
Ни как :) Ты сам использовал ее по другому. Щас расскажу в чем дело.
В примере что на uinc (который я тоже давным давно видел), что на коденете используется следующая директива #pragma comment(linker,"/ENTRY:New_WinMain")
Ключевой момент здесь - это New_WinMain. Если собирать проект именно так, или с каким нибудь другим именем для главной ф-ции, то при попытке собрать дебаг версию линкер выдает ошибку - он не может найти WinMain. Но, можно в обычной (не консольной как в твоем примере) прогамме за вместо этого гемора (New_WinMain) написать #pragma comment(linker,"/ENTRY:main"). Так - работает при компилировании и дебаг и релиз версии, при чем, если компилить релиз, то он получается таким же маленьким, как и в исходном варианте статьи.
А условные директивы, про которые я талдычил, нужны если у тебя написано #pragma comment(linker,"/ENTRY:New_WinMain"). Типа:
... WinMain(...)
#else
int New_WinMain(void)
#endif
Но, если сделать по моему варианту, то ничего этого не нужно. А это значительно удобнее и проще даже на вид. Во всяком случае в 6.0 у меня работало так и только так.
Жду критики :)
В общем - пока сам не попробуешь эту прогу собрать по тому примеру который ты нашел сам, молчи ;)
Какую еще "эту прогу"? Уточняю: - пример Я не находил, а собрал сам. Потому, что:
... "я и так умный".
Какую еще "эту прогу"? Уточняю: - пример Я не находил, а собрал сам. Потому, что:
Понял, вопросов больше не имею.
Ни как :) Ты сам использовал ее по другому. Щас расскажу в чем дело.
<skip>
Я её использовал так, как она предназначена для использования.
Давай по порядку.
В примере я показал для чего нужен "/NODEFAULTLIB"
Я до сих пор надеюсь, что моего примера было достаточно, чтоб это понять.
Я её использовал так, как она предназначена для использования.
Хм... Разьве я сказал, что это неправильно?
Давай по порядку.
Давай :) Только о чём?
В примере я показал для чего нужен "/NODEFAULTLIB"
Я до сих пор надеюсь, что моего примера было достаточно, чтоб это понять.
Да я это давно понял! Я и до этого понимал. Получается следующее - ты очень сильно стараешься объяснить мне то, что я понимаю и так.
Ладно, я устал быть непонятым, это наверное от того, что объяснять не умею (а это наверное от того, что не хочу :)). Забейте все и на всё.
libmysql.lib
А у Visual C++ это получается на ура.:(
GIZMO не знаешь в чем может быть дело?
Специально для GIZMO и прочих неверующих в то, что на VC exe-шники получаются значительно меньше чем на билдере. Сравните размеры пропорционально:
а кто спорит то с тобой?
ну поставь в систему библиотеки VCL и будут у тебя экзешники тоже маленькие...
а даже если и больше будут, то не намного, да и все равно это ничего не доказывает - я пишу на Билдере и мне нравится, надо будет - буду писать на VC - в чем проблема то? язык то один! есть конечно тонкости оболочки, но один серьезный проект и они будут известны...
так что хорошо разжигать религиозную войну! хорош! бесполезно это...
это прям как про Линукс с Виндовсом - та же история..
тем более от темы топика уклонились, вам не кажется, коллеги?
Единсвенное что меня беспокоит, в этих двух средах, то что Билдер не может откопилировать
libmysql.lib
А у Visual C++ это получается на ура.:(
GIZMO не знаешь в чем может быть дело?
Я не знаю как откомпилировать файл *.lib, тем более не знаю как его откоПИЛИровать:) Все шутки в сторону, без обид, Ок?
А если его не может подцепить линкер, то дело в том, что VC и BCB используют разный объектный формат COFF и OMF соответственно. libmysql.lib был собран в VC, поэтому BCB его не переваривает. Для этого есть coff2omf.exe, напусти его на libmysql.lib, а результат добавь к проекту:
Coff2Omf.exe [options] InputFile OutputFile
InputFile = libmysql.lib
OutputFile = OMF_libmysql.lib
[options] = см. по F1 (можно опустить т.к. [])
Специально для GIZMO и прочих неверующих в то, что на VC exe-шники получаются значительно меньше чем на билдере. Сравните размеры пропорционально:
И где здесь значительно? Учти, что Я собирал его с import32.lib[~700 kb].
И где здесь значительно? Учти, что Я собирал его с import32.lib[~700 kb]
Ну я же сказал тебе, что вопросов больше не имею. Просто привел факт и больше ничего. Во сколько раз мой файл меньше твоего? В два. У меня всё.
ЗЫ А цепляться к очепяткам как-то не очень умно имхо. Помоему все поняли, что я имел ввиду.
Ну я же сказал тебе, что вопросов больше не имею. Просто привел факт и больше ничего. Во сколько раз мой файл меньше твоего? В два.
...
Помоему все поняли, что я имел ввиду.
Надеюсь все поняли, что если добавить туда и туда по паре строк, то разрыв так и останется в 2 kb.
У меня всё.
Угу...