MASM - Petite question DlgProc proc [Résolu]

Signaler
Messages postés
14
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
14 février 2006
-
Messages postés
14
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
14 février 2006
-
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 ?

3 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
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

@++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
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++
Messages postés
14
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
14 février 2006

Merci pour vos réponses.