MASM - Petite question DlgProc proc

Résolu
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 à 20:28
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 ?

3 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
24 nov. 2005 à 22:04
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

@++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 nov. 2005 à 20:41
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++
0
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
Merci pour vos réponses.
0
Rejoignez-nous