Mikl_ Как я делаю DlgTemplate: Создаю диалог обычным способом (в rc), потом компилю, пишу маленькую программку, в ней делаю FindResource - LoadResource - GetSizeOfResource - пишу в файл - в хексах загоняю. Думаю, с меню можно аналогично проделать.
koderr Ух, ты!!! Просто, как всё гениальное! Но ведь получается, что ты перетаскиваешь секцию ресурсов с конца файла в его начало и выигрыша по размеру здесь никакого. Там ведь наверняка есть поля о назначении которых можно только догадываться, помнишь о "Печати Баала"? Нули для выравнивания ресурсов между собой, уникод, который можно получать из ASCII-символов либо при помощи макроса либо при помощи MultiByteToWideChar. Кстати, интересно какой редактор ресурсов создает наименьший код rc, brcc или fasm? Чудная вещь есть в masm32/include/dialogs.inc. И ещё один вопрос, а можно ли через Template встроить меню в окно, а не в диалог?
влом читать тему полностью опции линкера для компактной программы (для ms link): /ALIGN:32 /DRIVER /MERGE:.rdata=.text /MERGE:.data=.text Для сишнега еще можно добавить /ENTRY:main msvcrt.lib /NODEFAULTLIB
Если тема еще кому-то интересна, взял стандартый шаблон оконного приложения из Iczelion туториала, сжал все что только мог. Получился exe размером 588 байт, работает под XP SP2 кто-нибудь сможет получить меньший размер? в аттаче exe Код (Text): .686P .model flat includelib user32.lib include windows.inc extern _imp__CreateWindowExA@48:dword extern _imp__DefWindowProcA@16:dword extern _imp__DispatchMessageA@4:dword extern _imp__GetMessageA@16:dword extern _imp__PostQuitMessage@4:dword extern _imp__RegisterClassA@4:dword .code start: xchg ebx,eax mov edi,offset style assume edi:ptr WNDCLASSA push edi mov esi,offset _imp__RegisterClassA@4 call dword ptr [esi] mov ecx,CW_USEDEFAULT push ebx push [edi].hInstance push ebx push ebx push ecx push ecx push ecx push ecx push WS_OVERLAPPEDWINDOW + WS_VISIBLE push offset szWinTitle push [edi].lpszClassName push ebx call dword ptr [esi+4];_imp__CreateWindowExA@48 ;создать окно add edi,sizeof WNDCLASSA;lea edi,msg message_loop: push ebx ;цикл обработки сообщений push ebx push ebx push edi call dword ptr [esi+10h];_imp__GetMessageA@16 xchg eax,ecx jecxz short exit_msg_loop push edi call dword ptr [esi+0Ch];_imp__DispatchMessageA@4 ;вернуть управление Windows jmp short message_loop exit_msg_loop: ret WndProc proc ;hwnd:DWORD, Msg:DWORD, wParam:DWORD, lParam:DWORD mov esi,offset _imp__RegisterClassA@4 cmp dword ptr [esp+8],WM_DESTROY;cmp Msg,WM_DESTROY je short @@WM_DESTROY jmp dword ptr [esi+8];_imp__DefWindowProcA@16 ;все сообщения, не обрабатываемые в функции WndProc, направляются на обработку по умолчанию @@WM_DESTROY: push 0 ;завершение программы call dword ptr [esi+14h];_imp__PostQuitMessage@4 retn 10h WndProc endp ;WNDCLASSA ----------------------------------------------- style dd CS_HREDRAW or CS_VREDRAW; Стиль нашего окна lpfnWndProc dd WndProc;Адрес процедуры обработки событий cbClsExtra dd 0 ;Эта хрень нам не нужна cbWndExtra dd 0 ;и эта тоже hInstance dd 400000h ;Адрес нашей проги в памяти (Windows всегда её грузит по этому адресу) hIcon dd 10003h ;Иконка окна по умолчанию hCursor dd 10011h ;Курсор окна по умолчанию (здесь указан ID обычной стрелки) hbrBackground dd COLOR_WINDOW+1 ;Фон нашего окна lpszMenuName dd 0 ;Меню у нас отсутствует lpszClassName dd szWinClass; Указатель на имя нашего класса ;---------------------------------------------------------- msg MSG <> szWinTitle db 'Our First Window',0 szWinClass db 'Mikl32',0 end start
Уменьшил до 536 байт, неужели никто не поддержит? теоретический предел 97 байт. В аттаче exe 1) App Name = Class Name 2) после RegisterClass и CreateWindowEx к WNDCLASSA никто не обращается, поэтому использую место, которое структура занимала для MSG 3) пользуюсь тем, что функции в Импорте расположены по ординалам и использую к ним косвенную адресацию
Уменьшил до 340 байт отказавшись от импорта, сперва получаю адреса функций программой kernel.exe, затем вставляю адреса API функций, работает под XP SP2, но каждому придется настраивать под себя. В аттаче kernel.exe сам exe'шник и сорц к нему Продолжение темы здесь