Уважаемые знатоки, ответьте пожалуйста на вопрос,почему при вызове MessageBox так как в листинге ниже работает, а так Код (Text): invoke MessageBox,ADDR hWnd,ADDR ClassName,ADDR AppName,MB_OK не работает? И почему при вызове у hWnd не надо пересылать адрес а в двух последующих надо, из-за того что это строки? Код (Text): ................................... WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM .IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF uMsg==WM_CREATE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; invoke MessageBox,hWnd,ADDR ClassName,ADDR AppName,MB_OK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp ..................................
Не совсем так - с ADDR нужно передавать параметры, которым в прототипе функции соответствуют указатели, а это могут быть не только строки и массивы, но и структуры или простые дворды (например lpNumberOfBytesWritten в WriteFile)
Надо передавать значения там где надо передавать значения и передавать адреса там где надо передавать адреса. Помоему все очевидно. Да и вообще я бы посоветовал автору не использовать инвок вообще. Думаю разница между "push offset hWnd" и "push dword ptr [hWnd]" понятнее. Да и вообще лчше не использовать того, чего не понимаешь. Ассемблер например, API,... Делфи с компонентами однозначно лучше в этом плане.
Меня с пути не собьёшь! конечно юзать MSVS или BC++ Builder лучше (легче, быстрее, удобнее) но это не то! а предыдуший безinvoke-вский опыт был не очень-то! тем более теперь я всё понял! и я же только учусь как будто Вы GoldFinch с рождения знаете ассемблер !
вот сейчас я читаю уроки Iczeliona и пробую написанное сам написать и соответственно вопросы появляются