En fait, vous pouvez facilement faire ce que vous voulez. Vous devez juste faire attention à calculer correctement les adresses de chaque élément de la structure. Mais cela est aussi une tâche facile ...;)
S'il vous plaît vérifier le code que je l'ai fait:
WinMain:
push ebp
mov ebp, esp
add esp, -50h
push 7F00h
push 0h
call LoadIconA
mov ebx, eax
push 7F00h
push 0h
call LoadCursorA
;eax = return of LoadCursorA
;ebx = return of LoadIconA
mov dword ptr ss:[ebp-30h], 30h ;WNDCLASSEX.cbSize, dd WNDCLASSEX_size
mov dword ptr ss:[ebp-2Ch], 3h ;WNDCLASSEX.style, dd CS_VREDRAW + CS_HREDRAW
mov dword ptr ss:[ebp-28h], WndProc ;WNDCLASSEX.lpfnWndProc, dd WndProc
mov dword ptr ss:[ebp-24h], 0h ;WNDCLASSEX.cbClsExtra, dd NULL
mov dword ptr ss:[ebp-20h], 0h ;WNDCLASSEX.cbWndExtra, dd NULL
mov dword ptr ss:[ebp-1Ch], 0h ;WNDCLASSEX.hInstance, dd NULL
mov dword ptr ss:[ebp-18h], ebx ;WNDCLASSEX.hIcon, dd return of LoadIconA
mov dword ptr ss:[ebp-14h], eax ;WNDCLASSEX.hIconSm, dd return of LoadCursorA
mov dword ptr ss:[ebp-10h], 06h ;WNDCLASSEX.hbrBackground, dd COLOR_BTNFACE + 1
mov dword ptr ss:[ebp-0Ch], 0h ;WNDCLASSEX.lpszMenuName, dd NULL
mov dword ptr ss:[ebp-08h], offset WndProc ;WNDCLASSEX.lpszClassName, dd offset of ClassName
mov dword ptr ss:[ebp-04h], ebx ;WNDCLASSEX.hCursor, dd return of LoadIconA
lea eax,[ebp-30h]
push eax
call RegisterClassEx
Vous avez juste besoin de mettre avant l'appel à CreateWindow.
Un doute suffit de crier. PS: Rappelez-vous que WndProc est la procédure en boucle de votre programme d'assemblage.
Pourquoi avez-vous besoin d'un assemblage pour cela? – joni
@joni: il n'a pas besoin d'assemblage pour le faire. Il a juste * envie * de le faire dans l'assemblage :) – jyz
Comme l'un d'entre eux "Je suis cool parce que j'écris-win32/64-apps-dans-asm-juste-pour-fun-et-à- apprends quelque chose "-héros, il devrait être capable de comprendre par lui-même alors pour gagner la médaille: P – joni