WinApi mit NASM[X]

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 ....

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:
Zurück
Oben