begin process at 2012 05 25 11:22:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Divers

 > 

Débutant(e)

 > 

Messagebox (niveau débutant)


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

Messagebox (niveau débutant)

samedi 15 juillet 2006 à 16:45:40 | Messagebox (niveau débutant)

Ulala2

Bonjour,

je suis en train de créer une dll que je vais invoquer en vb6.

Tout marche très bien, sauf pour la fonction messagebox dont n'arrive pas à récuperer la valeur de retour qui semble se trouver dans eax.

Voila la partie intéressante, il y a d'autres fonctions mais tout le reste va bien :

.586
.model flat, stdcall
option casemap :none
option prologue:none
option epilogue:none

include C:\masm32\include\windows.inc
include C:\masm32\include\kernel32.inc
include C:\Masm32\include\user32.inc

includelib C:\masm32\lib\kernel32.lib
includelib C:\masm32\lib\user32.lib

.data

szDlgTitle    db "Titre de la messagebox",0
szMsg         db "Texte de la messagebox",0

.code

ALIGN 4

LibMain PROC parameter1:DWORD, parameter2:DWORD, parameter3:DWORD
   mov      eax, 1
   ret      12
LibMain ENDP

 msg1 PROC
   xor eax, eax
   push MB_ICONHAND or MB_OKCANCEL
   push offset szDlgTitle
   push offset szMsg
   push 0
   call MessageBox
;return value: in EAX resides a value
;indicating which button was clicked on
   
   ret  8 ; cest ici que ca doit pser probleme
msg1 ENDP

end LibMain

dimanche 16 juillet 2006 à 00:09:15 | Re : Messagebox (niveau débutant)

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
ret  0
puisque tu ne prends pas de param donc rien à dépiler.

ciao...
BruNews, MVP VC++
dimanche 16 juillet 2006 à 12:26:10 | Re : Messagebox (niveau débutant)

Ulala2

Bonjour,

ca marche très bien.

Pourrais-tu me dire comment puis-je savoir ce que je dois retourner avec RET ?

Car par exmple, j'ai une fonction addition dont le ret prend 8 en argument :

myAdd PROC
   mov   eax, [esp+8]
   add   eax, [esp+4]
   ret   8
myAdd ENDP

elle prend 2 paramètre (byval a et byval b que j'initialise depuis VB6) et renvoie la somme.

merci d'avance.

yk.
dimanche 16 juillet 2006 à 20:14:23 | Re : Messagebox (niveau débutant)

BruNews

Administrateur CodeS-SourceS
Si l'appelant empile 8 octets (les 2 params) donc ret 8.
'ret' ne veut pas dire 'ce que tu vas retourner' mais retour chez l'appelant dont l'adresse est dans EIP en [ESP] au moment de l'entrée dans le bloc fonction, la valeur derrière 'ret' est le nbr d'octets à dépiler, c'est-à-dire de combien remonter ESP après que EIP aura été POPé (implicite).

ciao...
BruNews, MVP VC++
dimanche 16 juillet 2006 à 21:15:45 | Re : Messagebox (niveau débutant)

Ulala2

merveilleux.

yk.
lundi 17 juillet 2006 à 16:47:52 | Re : Messagebox (niveau débutant)

Nasman

Bonjour Ulala2,

En dépilant les paramètres dans la routine appelée, tu réalise le stdcall comme fonctionnent les API windows. C'est la routine appelée qui fait le ménage.
Dans le cas ou c'est l'appelant qui effectue ce travail après le call (avec un add esp,xxxx) c'est la convention C.
Le plus important est de se rappeler qu'en entrée de la routine appelée, esp pointe sur l'adresse de retour (eip). Quand tu atteindra le ret dans la routine, il faudra que esp pointe bien vers l'adresse de retour (sinon plantage quasi assuré - sauf si...). Après tu peux dépiler le nombre d'octets correspondant au nombre de paramètres empilés (4 octets par dword empilé). Ce peut être différent si tu veux garder des choses sur la pile mais attention si tu réutilises la routine
lundi 17 juillet 2006 à 16:52:41 | Re : Messagebox (niveau débutant)

Ulala2

Merci pour ces précisions. cela fonctionne bien. comment puis-je faire pour retourner une string ? j'ai essayé de stocker le pointeur et le nombre de caractères dans les registres mais rien à faire.
lundi 17 juillet 2006 à 17:14:51 | Re : Messagebox (niveau débutant)

BruNews

Administrateur CodeS-SourceS
DLL POUR VB/VBA (9)
http://www.vbfrance.com/code.aspx?id=18494

ciao...
BruNews, MVP VC++


Cette discussion est classée dans : include, messagebox, push, masm32, eax


Répondre à ce message

Sujets en rapport avec ce message

[Screenshot, capture d'écran] Comment l'enregistrer dans un Bitmap ? [ par kinkey_wizard ] Bonjour tout le monde,Voici une source qui pour l'instant a pour effet de prendre une capture de l'écran (par simulation d'appui sur la touche PrintSc md.dll, comment utiliser md5() ? [ par Noit ] J'ai récupéré la dll sur le site de WiteG(le lien se trouve sur le site asmfr)J'arrive à compiler le programme suivant avec masmmais en débuggant il s [API] Fermer une fenêtre de navigateur ouverte avec une URL. [ par kinkey_wizard ] Bonjour tout le monde, Je vous explique mon problème : je voudais ouvrir une page web (par exemple "http://www.google.fr") dans le navigateur par déf Erreur bizarre : MessageBox affiche du texte en japonais [ par epineurien ] Bonjour à tous !J'ai quelques problêmes avec visual studio C++. Quand j'utilise une MessageBox le texte apparait ... en japonais. J'ai désactivé le su [FASM]Traduction program C to ASM [ par The Red Man ] je suis completement new in ASM :J'aimerai savoir je pourrai traduire ce bout de C en ASM, j'ai essayé déjà ça compile pas avec :include "win32ax.inc" Plantage incomprehensible [ par Luong ] Bonjour tout le monde,Voila un petit bout de code qui genere un beau plantage sur mon ordi (memory could not be written) sans que je comprenne vraimen send db to bmp [ par vincent2795 ] bonjour, j' ai un bmp que j' ai mais dans ma source sous forme "DB" je veux le sortir de ma source et le mettre dans un bmp. j' arrive a y sortire du probleme de simulation de 8086 sur ISIS PROTEUS [ par AZERGUI2 ] Bonjour, j'ai généré le .exe du programme suivant par le MAMSM32 ,mais la simulation ça marche pas au niveau de ISIS PROTEUS !!! il s'agit de tro Masm32 - adressage direct - soucis ! [ par ouadji ] Bonjour à tous,mov eax , [11223344h]cette instruction existe ! registre de segment utilisé ... DS ... par défaut !Code machine de cette instruction : Ancien code - CreateWindowEx ne fonctionne pas [ par 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 (invo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 5,959 sec (3)

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