Есть сорц. Code: #include <windows.h> void MyWinMain(void) { MessageBox(NULL,"Hello, world",NULL,MB_OK); ExitProcess(0); } В том же архиве, что и сорц (они не мои) лежит бинарник размером 2 кб. При попытке скомпилировать сорц пишет Code: Compiling... tinyapp.cpp Linking... tinyapp.obj : error LNK2001: unresolved external symbol __chkesp Debug/TinyApp.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe. TinyApp.exe - 2 error(s), 0 warning(s) Если заменить MyWinMain (не знаю, стоит ли это вообще делать) на WinMain выдает Code: Compiling... tinyapp.cpp C:\Tiny\TinyApp\tinyapp.cpp(4) : warning C4007: 'WinMain' : must be '__stdcall' C:\Tiny\TinyApp\tinyapp.cpp(4) : error C2731: 'WinMain' : function cannot be overloaded C:\Tiny\TinyApp\tinyapp.cpp(3) : see declaration of 'WinMain' Error executing cl.exe. TinyApp.exe - 1 error(s), 1 warning(s) Я запутался. Вот сорц.
unresolved external symbol __chkesp --- в асме такая ошибка обычно означает что неподключон файл с описанием....
Вот он - пример что надо=) P.S. Если хочешь, чтоб твой заработал - выкинь ExitProcess(0); З.З.Ы. КЕЗ не ори на мну, лучше в асе ответь=)
в первом случае создается новая точка входа в программу вот почитать http://rsdn.ru/article/cpp/crt.xml во втором не соответствуют параметры функции winmain, почитать можно там же
!_filin_!, #include <windows.h> - все подключено, windows.h лежит в инклудах. Alexsize, та же ошибка( da_ff, читаю...
вы не перестаете меня удивлять, кодеры античата. Code: tinyapp.obj : error LNK2001: unresolved external symbol __chkesp Компилер при включенной опции разных чекингов (помоему /Gs) добавляет тебе абсолютно на*** не нужный (почти) код __chkesp, который проверяет стек после каждого вызова. А CRT у тебя отключена в проэкте, поэтому линкуется без нее и ясен *** ф-ии нет нигде. Вырубай либо проверку в настройках проэкта, либо добавь CRT. Делай первое конечно И поставь сразу main'у __stdcall. Например APIENTRY или WINAPI. это нихера не что надо. у него сделан минимальный бинарник, там отключены CRT, и т.п.
1) где отключить CRT? пробежал все настройки, не нашел. можно ли писать бОльшие проги (например, блокнот) с отключенным CRT? 2) void MyWinMain(void) __stdcall {} так? или void WINAPI MyWinMain(void); ?
Я это уже смотрел, но про CRT там ничего нет. Может он называется по-другому? Я в этом пока не разбираюсь(
1) int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int) - вин проект или в настройках SUBSYSTEM:WINDOWS, надеюсь разберешься. 2) #pragma comment(linker, "/ENTRY:myEntry") , где myEntry твоя точка входа. Пишу в неадекватном состоянии, если где ошибься - поправьте. http://forum.vingrad.ru/topic-38864.html
прочел http://rsdn.ru/article/cpp/crt.xml . самое смешное, что у меня там нечего отключать, ибо параметра _ATL_MIN_CRT нет=\ Ni0x, 1 пробовал, рез тот же. по поводу второго... подумал и решил вручную точку входа не ставить, просто не знаю, куда. Дайте сорц оконного хелло ворлда на winapi. Я попробую его у себя скомпилить. блин... целый вечер за этим сижу... бред какой-то...
Инструкция: Win32 Application -> An empty project -> File View -> Source Files -> Add Files To Folders -> создаешь файл с расширением сpp -> далее пишешь в нем: Code: #include <windows.h> int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { MessageBox(0,"hello","123", 0); return 0; } F7
мде. значит, это уже было. так и должно быть 24 кб? если да, то как в примере сделали 2? при мах сжатии upx 9.5. но все равно не то=\
Piflit Я думаю это настройки линкера... в частности попробуй вот так! объеденить все данные в одну секцию у меня раза в два снижает размер #pragma comment(linker,"/FILEALIGN:512 /MERGE:.rdata=.text /MERGE:.data=.text /SECTION:.text,EWR /IGNORE:4078")
_http://uinc.ru/articles/28/ там есть исходник а вообще не вижу смысла........на стадии изучения основ останавливаться на этом