begin process at 2010 02 09 21:38:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Aide a la programmation Windows

 > 

Ancien code - CreateWindowEx ne fonctionne pas


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Ancien code - CreateWindowEx ne fonctionne pas

dimanche 26 octobre 2003 à 02:44:28 | Ancien code - CreateWindowEx ne fonctionne pas

TehWan

Je ne comprends vraiment pas pourquoi CreateWindowEx ne fonctionne pas. Je code en ancien code avec MASM32. J'ai même essayé la nouvelle syntaxe (invoke) et cela ne fonctionne pas plus. Peut-être que le code va vous en dire plus...


.386
.model flat, stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\gdi32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\gdi32.lib

.data?
msg MSG <?>
wc WNDCLASS <?>

.data
hWnd dword 0
hInstance dword 0

hWin dword 0
uMsg dword 0
lParam dword 0
wParam dword 0

szDisplayName byte "Wolf Rules", 0
szClassName byte "Wolf", 0

.code
start:
;WinMain
push 0
call GetModuleHandle
mov hInstance, eax

mov wc.style, CS_HREDRAW or CS_VREDRAW
lea eax, WndProc
mov wc.lpfnWndProc, eax
mov wc.cbClsExtra, 0
mov wc.cbWndExtra, 0
mov wc.lpszMenuName, 0
lea eax, szClassName
mov wc.lpszClassName, eax
push hInstance
pop wc.hInstance

push 0
call CreateSolidBrush
mov wc.hbrBackground, eax

push IDI_APPLICATION
push 0
call LoadIcon
mov wc.hIcon, eax

push IDC_ARROW
push 0
call LoadCursor
mov wc.hCursor, eax

lea eax, wc
push eax
call RegisterClass

push 0
push hInstance
push 0
push 0
push 600
push 800
push 0
push 0
push WS_OVERLAPPED or WS_VISIBLE
lea eax, szDisplayName
push eax
lea eax, szClassName
push eax
push WS_EX_WINDOWEDGE
call CreateWindowEx
mov hWnd, eax

push SW_SHOW
push hWnd
call ShowWindow

push hWnd
call UpdateWindow

StartLoop:
push 0
push 0
push 0
lea eax, msg
push eax
call GetMessage

cmp eax, 0
je ExitLoop

lea eax, msg
push eax
call TranslateMessage

lea eax, msg
push eax
call DispatchMessage

jmp StartLoop

ExitLoop:
mov eax, msg.wParam
ret
;WinMain End

WndProc:
mov eax, [esp+4]
mov hWnd, eax

mov eax, [esp+8]
mov uMsg, eax

mov eax, [esp+12]
mov wParam, eax

mov eax, [esp+16]
mov lParam, eax

cmp uMsg, WM_CREATE
je _CREATE

cmp uMsg, WM_DESTROY
je _DESTROY

cmp uMsg, WM_COMMAND
je _COMMAND

jmp _END

_CREATE:
push hWin
pop hWnd
jmp _END

_DESTROY:
push 0
call PostQuitMessage
jmp _END

_COMMAND:
mov eax, wParam
jmp _END

_END:
push lParam
push wParam
push uMsg
push hWin
call DefWindowProc
    ret
;WndProc End

end start


Avec des compares (cmp) et des jumps (je et jmp), j'ai pu déterminer ce qui ne fonctionnait pas. Pourtant, CreateWindowEx fonctionnait plus tôt. Pourriez-vous me dire ce qui ne fonctionne pas dans mon code? Merci.

-- Wolf --

NB: Je ne veux pas être méchant mais les débutants qui vont me dire que je n'ai pas de procédure ou que c'est à cause du déroulement linéaire feraient mieux de retourner étudier les bases du assembly.
dimanche 26 octobre 2003 à 05:28:47 | Re : Ancien code - CreateWindowEx ne fonctionne pas

TehWan

Je l'ai trouvé! Dans le WndProc, simplement changer
mov hWnd, eax
pour
mov hWin, eax

-- Wolf --


Cette discussion est classée dans : mov, wc, push, call, eax


Répondre à ce message

Sujets en rapport avec ce message

BeginPaint code débutant [ par TRAX44 ] Bonjour, le problème est tout simple je comprends absolument pas ce qui marche pas. Le "programme" est censé créer une fenêtre est afficher du texte e mon programme bloque [ par rhumsek ] slt j'ai améliore mon programme mais il provoque une erreure lorsdu calcul de la somme des entiers saisi (sommeentier)POURTANT il exécute bien les de LecteurEstDvd asm inline [ par AlexMAN ] Bonjour, Voila j'ai un ptit pb au nivo, je pense, de l'appel de la fonction DeviceIoControl, le code : //Fonction Cint __stdcall LecteurEstDvd(char *p HELP ! :'( [ par TheHacker ] Salut j'ai un probleme: voici mon code, il fonctionne correctement, activer le programme vous verres qu'a la fin i laffiche un MessageBox avec marqué Problème de création de Dialog [ par bni ] 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 Quels sont les parametres (nombre, taille...) [ par Renfield ] Bonjour,on peut appeler RunDll32 pour executer des fonctions contenues dans des dll...j'aimerais m'affranchir de cette étape, mais j'ai pour cela beso Une mémoire "read" [ par msteve ] Bonsoir, Je suis débutant et j'ai recopié un programme test. Je parviens à l'assembler, puis à créer un .exe ; quend je lance l'exe j'obtiens la boîte Assembleur et tableau + linux + bof [ par flocic ] Bonjour, J'ai un petit pb de comprehension, j'ai un programme qui deborde au bout 44 octet  à cause d'un depassement d ela taille du tableau. Mais ce declaration externe + news Kmdkit [ par patatalo ] salut, du nouveau pour les fondus de ring 0 sous NT: http://www.website.masmforum.com/tutorials/kmdtute/ ( kmd = kernel mode drivers ) avec masm32, exception 13 lors du scan memoire haute [ par patatalo ] salut, pourquoi ce code de detection de memoire en mode 32 bits sans paging me donne une exception 13 sur certaines cartes meres ( ASUS ) a l'adresse


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales