Проблема в следующем: с помощью #pragma comment(linker,"/NODEFAULTLIB") отключаю все библиотеки по умолчанию. (нужно приложение на чистом апи, минимльного размера) Все хорошо, но могу использовать конструкции try/catch Помогите плиз, долблюсь уже 3 часа
Ну ты сам и ответил - не отключай ) Придется не отключать, либо писать свой __CxxFrameHandler. Я не знаю других вариантов.
хм... если их отключить, то (без try catch) размер .exe ~2kb, если включить и использовать СЕХ, то уже 52кб. Неужели компилятор не может использовать seh без стандартных библиотек?
Опишу подробней, чего я хочу добиться: Вот такой код занимает 1,5кб Код (Text): #include <Windows.h> #pragma comment(linker, "/SECTION:.rdata,,ALIGN:4096") #pragma comment(linker, "/SECTION:.data,,ALIGN:4096") #pragma comment(linker, "/SECTION:.text,ERW,ALIGN:4096") #pragma comment(linker, "/ALIGN:4096") #pragma comment(linker, "/MERGE:.rdata=.text") #pragma comment(linker, "/MERGE:.data=.text") #pragma comment(linker, "/SUBSYSTEM:WINDOWS") #pragma comment(linker, "/ENTRY:NewWinMain") void NewWinMain() { } Вот такой уже 42кб: Код (Text): ... int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { } А если попытаться вот так, то получаем unresolved link (LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup): Код (Text): #pragma comment(linker, "/ENTRY:NewWinMain") void NewWinMain() { try { wsprintfA(0,"fuck"); } catch(...) { MessageBoxA(0,"Oooops","",0); } } Как сделать последний вариант рабочим? И чтоб размер был ~2кб, я чувствую, что это реально.
Ответ простой - ему не хватает main(). Определи пустую extern "C" int _cdecl main() { return 0; } Asterix Насчет try/except я уже писал.
Вот такой код подвешивает проц на 100%: Код (Text): #pragma comment(linker, "/ENTRY:NewWinMain") #pragma comment(lib, "exsup.lib") void NewWinMain() { __try { wsprintfA(0,"fuck"); } __except(EXCEPTION_ACCESS_VIOLATION) { MessageBoxA(0,"Oooops","",0); } }
т.е. ответом на топик было: Код (Text): #pragma comment(linker, "/ENTRY:NewWinMain") #pragma comment(lib, "exsup.lib") void NewWinMain() { __try { wsprintfA(0,"fuck"); } __except(EXCEPTION_EXECUTE_HANDLE) { MessageBoxA(0,"Oooops","",0); } } Топик мона закрывать, все ОГРОМНОЕ спасибо!
lammer_222 скорей всего оно включает и стантартный форматер вьюер неотрезолвенного ексепшена. проверьте. впрочем, что вам мешает написать пару макросов с установщиками/снималками/обработчиками ексепшена через асм? или воспользоваться veh?
можно прилепить crt от шестой студии и компилить чтобы она было в импорте. тогда тоже файл будет маленьким и dll есть во всех виндах.