MASM - Petite question DlgProc proc [Résolu]

Messages postés
14
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
14 février 2006
- - Dernière réponse : n_o_u_n_o_u
Messages postés
14
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
14 février 2006
- 24 nov. 2005 à 23:11
Bonjour,

je continue ma découverte de MASM et j'ai encore une question...

Voici un extrait du code que j'ai placé dan DlgProc proc :
...
.if dx==BN_CLICKED
invoke GetDlgItemText,hWin, IDC_EDT1, ADDR tempo, 512
.if ax==IDC_BTN1
invoke SetDlgItemText,hWin, IDC_EDT2, ADDR tempo
.elseif ax==IDC_BTN2
invoke MessageBox,hWin, ADDR tempo, ADDR tempo, MB_OK
.endif
.endif
...

Cela ne fonctionne pas, alors que le code ci-dessous fonctionne :
...
.if dx==BN_CLICKED
.if ax==IDC_BTN1
invoke GetDlgItemText,hWin, IDC_EDT1, ADDR tempo, 512
invoke SetDlgItemText,hWin, IDC_EDT2, ADDR tempo
.elseif ax==IDC_BTN2
invoke GetDlgItemText,hWin, IDC_EDT1, ADDR tempo, 512
invoke MessageBox,hWin, ADDR tempo, ADDR tempo, MB_OK
.endif
.endif
...

Je ne comprends pas du tout pourquoi le premier code ne fonctionne pas. Il semble pourtant correct, non ?
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
3
Merci
salut,

dans le premier cas,
invoke GetDlgItemText,hWin, IDC_EDT1, ADDR tempo, 512
ecrase la valeur de eax pour retourner la taille du texte copié et donc eax n'as pas du tout la meme valeur dans le cas 1 et dans le cas 2.

dans le cas 1, le test devrait etre:
invoke GetDlgItemText,hWin, IDC_EDT1, ADDR tempo, 512
.if eax==512
invoke MessageBox,0,"Waooo, le buffer est plein !!!","infos",MB_OK
.endif

@++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_patatalo
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
0
Merci
BN_CLICKED vaut 0
donc en asm test de nullité s'écrit
test dx, dx
je VautZero

Comment se fait-il que tu travailles sur des registres 16 bits dans un prog Win ???
Depuis le pentium tout accès 16 bits souffre de cycle de pénalité, registres 32 et 8 non alors évite ce code.

Comme tu as l'air de commencer, évite aussi ce sabir, pas ainsi que tu connaitras l'asm. Ne pas oublier que l'asm est employé pour optimisation maxi et pas avec ça que tu l'auras, un compilo C moderne te battra sans problème à tout coup. Si tu veux te mettre à l'asm alors écris de l'asm, c'est tout à fait possible sur MASM32.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
14
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
14 février 2006
0
Merci
Merci pour vos réponses.
Commenter la réponse de n_o_u_n_o_u