Hallo !
Ich hab hier ein kleines Problem:
Ich habe versucht ein einfaches ASM Programm mit Hilfe der NASMX Makrosammlung zu schreiben, doch leider wird das Fenster nicht angezeigt.
Ich bin schon mit dem Debugger darüber gegangen, habe dort aber nichts entdeckt. Das Programm läuft so wie es sollte, nur es ist eben kein Fenster da ....
MrSpider
EDIT: Fehler gefunden: Hatte keine WinMain Funktion ...
Ich hab hier ein kleines Problem:
Ich habe versucht ein einfaches ASM Programm mit Hilfe der NASMX Makrosammlung zu schreiben, doch leider wird das Fenster nicht angezeigt.
Ich bin schon mit dem Debugger darüber gegangen, habe dort aber nichts entdeckt. Das Programm läuft so wie es sollte, nur es ist eben kein Fenster da ....
Code:
%include 'nasmx.inc'
%include 'win32\windows.inc'
%include 'win32\kernel32.inc'
%include 'win32\user32.inc'
;// You must include the following when using typedef function names
;// for either ASCII or Unicode
;// eg: MessageBox is an alias for MessageBoxW or MessageBoxA
;// depending on whether UNICODE is defined or not
%include 'win32\unicode.inc'
entry main
[section .text]
proc main
invoke GetModuleHandle, 0
mov ebx, dword WndProc
mov ecx, dword szClass
mov [wc + WNDCLASSEX.hInstance], eax
mov [wc + WNDCLASSEX.lpfnWndProc], ebx
mov [wc + WNDCLASSEX.lpszClassName], ecx
invoke RegisterClassEx, NASMX_PTR wc
cmp eax, 0
je .error
invoke CreateWindowEx, \
WS_EX_CLIENTEDGE, \
NASMX_PTR szClass, \
NASMX_PTR szTitle, \
WS_CAPTION + WS_MAXIMIZEBOX + WS_MINIMIZEBOX + WS_SIZEBOX + WS_SYSMENU + WS_VISIBLE, \
CW_USEDEFAULT , CW_USEDEFAULT, \
200 , 200, \
NASMX_PTR NULL, \
NASMX_PTR NULL, \
NASMX_PTR [wc + WNDCLASSEX.hInstance], \
NASMX_PTR NULL
cmp eax, 0
je .error
mov [hWnd], eax
.msgloop:
invoke GetMessage, NASMX_PTR message, 0, 0, 0
cmp eax, dword 0
je .exit
invoke TranslateMessage, NASMX_PTR message
invoke DispatchMessage, NASMX_PTR message
jmp .msgloop
.exit:
invoke ExitProcess, 0
.error:
invoke GetLastError
invoke FormatMessageA, \
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, \
0, \
NASMX_PTR eax, \
0, \
errMsg, \
0, \
0
invoke MessageBox, 0, "Error !", szTitle, MB_OK | MB_ICONINFORMATION
invoke LocalFree, errMsg
jmp .exit
endproc
proc WndProc
hwnd argd ; Window handle
umsg argd ; Window message
wparam argd ; wParam
lparam argd ; lParam
.wm_destroy:
cmp argv(umsg), dword WM_DESTROY
jnz .wm_default
invoke PostQuitMessage, 0
.wm_default:
invoke DefWindowProc, NASMX_PTR argv(hwnd), uint32_t argv(umsg), size_t argv(wparam), size_t argv(lparam)
.exit:
ret
endproc
[section .bss]
hInstance: reserve(NASMX_PTR) 1
hWnd: reserve(NASMX_PTR) 1
errMsg: reserve(NASMX_PTR) 1
[section .data]
szTitle: declare(NASMX_CHAR) NASMX_TEXT("winTest"), 0x0
szClass: declare(NASMX_CHAR) NASMX_TEXT("wnTstClss"), 0x0
NASMX_ISTRUC wc, WNDCLASSEX
NASMX_AT cbSize, sizeof(WNDCLASSEX)
NASMX_AT style, CS_VREDRAW + CS_HREDRAW
NASMX_AT lpfnWndProc, NULL
NASMX_AT cbClsExtra, NULL
NASMX_AT cbWndExtra, NULL
NASMX_AT hInstance, NULL
NASMX_AT hIcon, NULL
NASMX_AT hCursor, NULL
NASMX_AT hbrBackground, COLOR_BTNFACE + 1
NASMX_AT lpszMenuName, NULL
NASMX_AT lpszClassName, NULL
NASMX_AT hIconSm, NULL
NASMX_IENDSTRUC
NASMX_ISTRUC message, MSG
NASMX_AT hwnd, NULL
NASMX_AT message, NULL
NASMX_AT wParam, NULL
NASMX_AT lParam, NULL
NASMX_AT time, NULL
NASMX_ISTRUC pt, POINT
NASMX_AT x, NULL
NASMX_AT y, NULL
NASMX_IENDSTRUC
NASMX_IENDSTRUC
MrSpider
EDIT: Fehler gefunden: Hatte keine WinMain Funktion ...
Zuletzt bearbeitet: