Если запускаю сначало поток, па потом создаю диалог, то приложение на ХП падает... На висте работает. Потом просто вызывает МесБокс,0,0,0,0 В чем может быть дело?
Соответственно, если строку invoke CreateThread,NULL,NULL,RunProc,iRunParam,lpRunThread Записать не перед запуском окна, а запускать ее после нажатие кнопки ЕХИТ, то все работает. Код (Text): format PE GUI 4.0 entry MyEntry include '%fasminc%\win32a.inc' section '.data' data readable writeable gIst dd 0 gWnd dd 0 lpRunThread dd 0 iRunParam dd 0 section '.code' code readable executable MyEntry: invoke CreateThread,NULL,NULL,RunProc,iRunParam,lpRunThread invoke GetModuleHandle,NULL mov [gIst],eax invoke DialogBoxParam,eax,2,0,DlgProc,0 ExitApp: invoke ExitProcess,0 proc DlgProc,hWnd,uMsg,wParam,lParam push edi esi ebx mov eax,[uMsg] cmp eax,WM_COMMAND je jCOMMAND cmp eax,WM_INITDIALOG je jINITDIALOG cmp eax,WM_CLOSE je jCLOSE xor eax,eax jmp finish jINITDIALOG: mov eax,[hWnd] mov [gWnd],eax mov eax,1 jmp finish jCOMMAND: mov eax,[wParam] cmp eax,1000 je a1000 xor eax,eax jmp finish a1000: invoke SendMessage,[hWnd],WM_CLOSE,0,0 mov eax,1 jmp finish jCLOSE: invoke EndDialog,[hWnd],0 mov eax,1 finish: pop ebx esi edi ret endp proc RunProc,param @@MainLoop2: invoke MessageBox,0,0,0,0 invoke Sleep,60000 jmp @@MainLoop2 ret endp section '.idata' import data readable writeable library kernel, 'KERNEL32.DLL',\ user, 'USER32.DLL' import kernel,\ GetModuleHandle,'GetModuleHandleA',\ ExitProcess, 'ExitProcess',\ CreateThread, 'CreateThread',\ Sleep, 'Sleep' import user,\ MessageBox, 'MessageBoxA',\ DialogBoxParam, 'DialogBoxParamA',\ EndDialog, 'EndDialog',\ SendMessage, 'SendMessageA' section '.rsrc' resource from 'win32.res' data readable
1. invoke CreateThread,NULL,NULL,offset RunProc,iRunParam,lpRunThread 2.invoke MessageBox,0,0,0,0 - это что за новости? В мессаджбоксе 2й и 3й параметры обязательны. Это должны быть валидные указатели на строки.
Удалил все связанное с окном, просто MyStart: invoke CreateThread... не работает (( Если копирую запуск в действие после нажатия кнопки окна все работает! Что за бага? На Висте все работает!!! На ХР нет
А что у тебя осталось после invoke CreateThread... ? ExitProcess? Тогда странно, что в висте работает :\
Вот так надо вызывать invoke CreateThread,0,0,RunProc,0,0,addr lpRunThread перед RunProc ставить offset или addr не обезательно, оно и так вернёт указатель на процедуру