Problème de création de Dialog

cs_bni Messages postés 4 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 16 mars 2004 - 16 mars 2004 à 20:31
cs_bni Messages postés 4 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 16 mars 2004 - 16 mars 2004 à 21:44
Bonjour,

Suivant un tutoriel disponible sur le net, j'ai essayé de creer une boite de dialogue. Le seul problème, c'est qu'il n'y a qu'une console qui est lancée, mais pas de dialogue..

Voici la source (J'utilises TASM 5.0r) :

.386
.model flat, stdcall

include windows.inc

extrn GetModuleHandleA : PROC
extrn RegisterClassExA : PROC
extrn CreateWindowExA : PROC
extrn LoadIconA : PROC
extrn LoadCursorA : PROC
extrn ShowWindow : PROC
extrn UpdateWindow : PROC
extrn PostQuitMessage : PROC
extrn GetMessageA : PROC
extrn TranslateMessage : PROC
extrn DispatchMessageA : PROC
extrn DefWindowProcA : PROC
extrn ExitProcess : PROC

.data

msg MSGSTRUCT <?>
wc WNDCLASS <?>

hMain dd 0
hInst dd 0

ProgName db 'Dialog..',0
MainClass db 'd0',0

.code

start:
call GetModuleHandleA, 0 ; Get the Instance handle(module handle)  
mov hInst, eax ; save here

mov [wc.clsStyle], CS_HREDRAW + CS_VREDRAW
mov [wc.clsLpfnWndProc], offset WndProc
mov [wc.clsCbClsExtra], 0
mov [wc.clsCbWndExtra], 0

mov eax, [hInst]
mov dword ptr [wc.clsHInstance], eax

call LoadIconA, 0, IDI_APPLICATION ; Load the icon for the application
mov dword ptr [wc.clsHIcon], eax ; save here

call LoadCursorA, 0, IDC_ARROW ; Load the cursor for the application
mov dword ptr [wc.clsHCursor], eax ; save here

mov [wc.clsHbrBackground], COLOR_WINDOW + 1
mov dword ptr [wc.clsLpszMenuName], 0
mov dword ptr [wc.clsLpszClassName], offset MainClass
push offset wc
call RegisterClassExA

call CreateWindowExA, 0, offset MainClass, offset ProgName,				WS_VISIBLE OR WS_CAPTION OR WS_SYSMENU OR WS_THICKFRAME,				150,\                   ; X position
150,\                     ; Y position
500,\                   ; width of the window
300,\                   ; height of the window
0,\                        ; handle to parent's window if exists
0,\                        ; handle to the window's menu
hInst,\                   ; the instance handle
0                         ; lparam
mov hMain, eax   ; save handle of window

call ShowWindow, hMain, SW_SHOWNORMAL
call UpdateWindow, hMain

msg_loop:
call GetMessageA, offset msg, 0, 0, 0
cmp ax, 0
je end_loop
call TranslateMessage, offset msg
call DispatchMessageA, offset msg
jmp msg_loop
end_loop:
call ExitProcess, 0

WndProc proc Hwnd:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD
movzx eax, WORD PTR wmsg
.if eax == WM_DESTROY
jmp wmdestroy
.else
call DefWindowProcA, Hwnd, wmsg, wparam, lparam
jmp @@End
.endif
xor eax, eax
@@End:
ret

wmdestroy:
call PostQuitMessage, 0
xor eax, eax
ret
WndProc endp
public  WndProc

end start


Merci d'avance pour votre aide.
(Désolé si le code est trop long)

6 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 mars 2004 à 20:39
Regarde la doc du linker tasm que je ne connais pas.
Avec masm32 je mets:
...
...
Link.exe /nologo /SUBSYSTEM:WINDOWS.....

il y a surement un truc /SUBSYSTEM:WINDOWS ou de ce genre sur tasm.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_bni Messages postés 4 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 16 mars 2004
16 mars 2004 à 20:48
Voici le fichier _combil.bat qui reprend les commandes de compilation (%1 = nom du fichier à titre informatif) :

tasm32 /ml /iE:\tasm\INCLUDE %1
tlink32 -x /Tpe /c %1,%1,, import32.lib,,


Normalement, le lien devrait être correct.. Et aucunes erreurs ou aucuns avertissement n'est signalé !
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 mars 2004 à 20:52
http://www.movsd.com/
tu y trouveras MAM32, au moins il est fourni avec tout ce qu'il faut.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_bni Messages postés 4 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 16 mars 2004
16 mars 2004 à 21:12
Avant de me tourner vers un autre assembleur, je voulais spécifier que je souhaites apprendre l'ASM le plus basique possible.. C'est à dire, sans simplification dû au compilateur.

Je me poses déjà la question de savoir si les instructions tel que .if ou .else (dans TASM en tout cas) font bien parties des bases de l'ASM..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 mars 2004 à 21:41
Pas besoin d'employer aucun sabir specifique et reconnu par tel assembleur. Je deconseille d'ailleurs totalement.
On ecrit un ASM conforme aux specs Intel dans MASM32 comme on peut employer le sabir si on se fout de toute optimisation.
Tu peux aller tranquille sur MASM32, c'est impec.
Tu mets cela en haut des fichiers:
.586 ; ou autre mais va bien ainsi
.model flat, stdcall
option casemap :none
option prologue:none
option epilogue:none
Et tu es certain qu'il n'insere rien a l'insu de ton plein gre.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_bni Messages postés 4 Date d'inscription jeudi 11 mars 2004 Statut Membre Dernière intervention 16 mars 2004
16 mars 2004 à 21:44
Merci pour ces informations. Je vais donc tester MASM32 et décider quel assembleur je choisirais pour le futur..
Il est vrai que je vois beaucoup de monde utilisé MASM32.. à raison peut-être ;)
0
Rejoignez-nous