Accéder à l'interface d'une Dll [C++] - C++ - Programmation
Marsh Posté le 25-06-2003 à 19:44:34
Il y a Depends.exe fourni avec Visual Studio.
Tu dois l'avoir avec VC++ 6.
Marsh Posté le 25-06-2003 à 22:29:25
Il me semble qu'une dll n'exporte que des fonctions
Sinon, tu prends n'importe quel désassembleur ca te donne le nom des fonctions. Par contre ca te donnera pas la liste des parametres, je ne vois d'ailleurs pas comment il serait possible d'y remonter. ( a la rigueur si on connait le compilo et qu'on a utilisé des noms décorés... )
Marsh Posté le 26-06-2003 à 08:27:31
HuSt : Merci, c'est exactemen ce que je cherchais!
Ace17 : Je n'ai jamais utilisé de désassembleur, mais je peux facilement imaginer l'intéret ! Par contre, je pensais pas que ca puisse me donner un moyen "facile" d'accéder à ma Dll)
Marsh Posté le 26-06-2003 à 08:31:21
L'intéret est pas si évident que ca. Un programme en assembleur un peu conséquent c'est déja pas facile a lire, mais le code généré par un désassembleur est carrément illisible car tous les identificateurs ont disparu, je te laisse imaginer le calvaire sur plusieurs dizaines de milliers de lignes de code... Disons que le désassembleur car peut servir si tu t'intéresses a un point précis du programme, ou si tu sais exactement ou chercher.
Marsh Posté le 26-06-2003 à 08:40:04
D'accord, c'est ce que je pensais, ca doit etre la jungle
Merci pour tes réponses
Le programme cité au dessus livré avec Visual Studio fait tres bien l'affaire, et il te montre de quelles Dll la tienne est dépendante !
Marsh Posté le 26-06-2003 à 10:26:37
Citation : Par contre ca te donnera pas la liste des parametres, je ne vois d'ailleurs pas comment il serait possible d'y remonter |
Avec la décorations des noms.
Marsh Posté le 26-06-2003 à 15:31:23
HelloWorld a écrit :
|
Voir plus haut
" a la rigueur si on connait le compilo et qu'on a utilisé des noms décorés... "
Marsh Posté le 26-06-2003 à 17:13:08
En fait c'est pas lié au compilo mais au langage (=> classes C++). Il me semble que c'est plus ou moins normalisé.
Marsh Posté le 26-06-2003 à 17:56:27
Les noms décorés, c'est ce que l'on met dans le fichier def?
Marsh Posté le 26-06-2003 à 17:57:18
Yoyo@ a écrit : Les noms décorés, c'est ce que l'on met dans le fichier def? |
C'est les machins genre
void tafonction@u455?545454
Marsh Posté le 26-06-2003 à 18:41:24
HelloWorld a écrit : En fait c'est pas lié au compilo mais au langage (=> classes C++). Il me semble que c'est plus ou moins normalisé. |
Ouais je crois que quand on veut remonter aux parametres ca passe mais quand on linke deux .obj provenant de deux compilos différents il y a des fois ou ils ne se comprennent pas...
Marsh Posté le 26-06-2003 à 21:32:40
Les amis, j'ai une question...
Est il possible, lors de l'appel d'un dll, de la debugger?
En fait, je cherche à connaitre par un moyen ou par un autre la valeur des variable dans le corps des fonctions de la Dll lorsque celle ci est exécutée...
Les cout et autres ne semblent pas marcher (aucun effet visible)
Marsh Posté le 26-06-2003 à 21:40:08
Ben tu peux lui faire générer un fichier de log, tout simplement. Ou alors a grand coups de MessageBox, c'est une autre technique.
Marsh Posté le 26-06-2003 à 21:41:25
HelloWorld a écrit :
|
Maintenant que j'y pense, j'ai jamais vu de noms décorés dans une DLL. Ca existe?
Marsh Posté le 26-06-2003 à 21:59:58
Ace17 a écrit : Ben tu peux lui faire générer un fichier de log, tout simplement. Ou alors a grand coups de MessageBox, c'est une autre technique. |
Euh, pour le MessageBox, ca me semble rapé car je fais une Win32 DLL (donc, pas de MFC présente a priori???)
Et pour générer le log, je dois faire comment? utiliser les macros TRACE0?
Marsh Posté le 26-06-2003 à 22:00:45
Ace17 a écrit : |
A priori, ca a l'air d'exister :
http://www.laboratoire-microsoft.o [...] dev/dll/4/
Marsh Posté le 27-06-2003 à 09:31:53
Ben il me semble que dès que tu as une classe dans ta dll, ça te génère des noms décorés.
Marsh Posté le 27-06-2003 à 09:32:43
HelloWorld a écrit : Ben il me semble que dès que tu as une classe dans ta dll, ça te génère des noms décorés. |
Bah un compilo CPP va decorer n'importe quelle fonction sauf celle en extern "C"
Marsh Posté le 27-06-2003 à 10:29:43
Yoyo@ a écrit : Est il possible, lors de l'appel d'un dll, de la debugger? |
Si c'est simple, tu peut tout simplement créer une application qui va lancer ta DLL et éxecuter les fonctions que tu souhaite tester. Tu n'as plus alors qu'à débugger l'application.
Sinon, tu peut comme indiqué plus haut écrire dans un fichier de log, faire des Message Boxes (en utilisant l'API Windows standard, pas besoin d'utiliser les MFCs), ou encore utiliser la fonction OutputDebugString.
Enfin, tu peut faire un appel à la fonction DebugBreak qui va te stopper ton programme et te proposer de le débugger.
Marsh Posté le 27-06-2003 à 10:30:31
gatorette a écrit : |
debutant
Code :
|
pour ceux qui en ont dans le slip
Marsh Posté le 27-06-2003 à 10:41:26
gatorette a écrit : |
Ah oui, exact, j'avais oublié cette fonction OutputDebugString! Elle me générera des messages que je devrai récupérer avec un programe externe !
Merci
PS : par curiosité, quand tu parles des MessageBox Windows qui ne font pas partie de la MFC, tu parles des fonctions s'appelant MessageBox?
Marsh Posté le 27-06-2003 à 10:59:20
Yoyo@ a écrit : PS : par curiosité, quand tu parles des MessageBox Windows qui ne font pas partie de la MFC, tu parles des fonctions s'appelant MessageBox? |
Oui... c'est une fonction de l'API Windows. C'était en réponse à : "Euh, pour le MessageBox, ca me semble rapé car je fais une Win32 DLL (donc, pas de MFC présente a priori???)".
Marsh Posté le 27-06-2003 à 11:36:30
gatorette a écrit : |
Oui, oui, c'est pour ca que je posais la question !
Bon, bah c'est parfait ca ! Avec des petits char[] ou char*, ca va bien le faire Merci !
Marsh Posté le 25-06-2003 à 17:40:50
Salut,
j'aurais voulu savoir si il existait des utilitaires ou un moyen de voir les interfaces (membres et fonctions externes) des fichiers dll compilés par exemple avec VC++
Merci.