Salut,
Existe t il un moyen pour retrouver l'interface pour utiliser une dll quelconque .
Je ne sais pas dans quelle direction chercher.
A+
Salut,
Existe t il un moyen pour retrouver l'interface pour utiliser une dll quelconque .
Je ne sais pas dans quelle direction chercher.
A+
Qu'entend-tu par "une interface pour utiliser une dll" :
Pour avoir les noms des fonctions exportées, c'est facile (ex. : avec dumpbin si tu as MSVS, mais plein d'autres outils le font).
Pour avoir des infos sur les types des paramètres, c'est moins évident (leur taille, c'est plus simple).
Ce n'est pas une raison pour ne pas répondre à la question "Qu'entend-tu par "une interface pour utiliser une dll : "...Envoyé par andrei
Parmi les outils qui peuvent aider quand (comme moi ) on utilise MinGW : dlltool, nm, pexports.
En fait, lorsqu'on a une DLL sans les sources et qu'on veut l'utiliser dans un programme sans avoir à faire appel à LoadLibrary()/GetProcAddress() dans le programme, on doit créer une librairie ("libXXX.a" avec MinGW) qui permettra de lier l'exécutable produit avec la DLL.
Dans le processus qui mène à la création d'une telle librairie, on est amené à exporter des symboles de la DLL et il y a des chances que cela t'intéresse.
Quelques liens :
http://wiki.tcl.tk/2435
http://www.dcs.gla.ac.uk/~sof/Makefile-dll
http://www.mingw.org/docs.shtml (voir al partie "How to create a def file for a dll")
http://www.geocities.com/yongweiwu/stdcall.htm
Essaye aussi de préciser ta question, de décrire ta situation, de donner des exemples... Sans précision, tu risques de ne pas avoit de réponse ou d'avoir des réponses qui ne te conviennent pas.
Enfin, quand le problème est résolu : cliques sur :smile:
interface pour utiliser une dll
Et bien, ma petite expérience en prog (je suis pas un gourou) m'a appris que l'on mettait les briques qui permettent de faire tourner l'appli.
Dans la programmation objet je suppose donc que les dll contiennent donc les classes de l'appli.
Je voudrais donc avoir les classes avec les methodes et propriétés qui vont avec.
Avec ca je pourrais faire un wrapper pour python.
Elles peuvent. Les classes peuvent très bien être dans l'exécutable et les DLLs (accompagnant la même application) être écrites en C et n'exporter que des fonctions (et pas des méthodes/classes).Envoyé par andrei
Ce qui peut aider (si on en connaît le format et si ils existent) : les fichiers ".tlb" (Type Library) correspondants à la DLL.
Tu as essayé les outils cités dans mon précédent message ? Qu'est-ce qu'ils donnent (poste le résultat ou un extrait, ne te contente pas de répondre "pas grand chose") ?Envoyé par andrei
Tu devrais pouvoir mieux comprendre le résultat après avoir lu Name mangling.
Salut,
comme tu l'avais indiqué dans ton premier message :
J'ai obtenu facilement le nom de toutes les methodes exportées grace à pexports.Pour avoir les noms des fonctions exportées, c'est facile (ex. : avec dumpbin si tu as MSVS, mais plein d'autres outils le font).
Pour avoir des infos sur les types des paramètres, c'est moins évident (leur taille, c'est plus simple).
par contre je n'ai pas d'indices sur leurs parametres
Personne n'a cité dependency walker ?
http://www.dependencywalker.com/
parce que c'était des fonctions C. Le nom des fonctions C++ est encodé (name mangling, voir réponse de David.Schris). Le name mangling est spécifique à chaque compilo C++. Ta classe n'est pas exportée, ce sont ses fonctions membres / opérateurs etc... qui le sont. Les fonctions virtuelles ne sont pas vraiment exportées, seule la vtable l'est. Donc si y'a des fonctions virtuelles oublie ton wrapper dynamique.Envoyé par andrei
Regarde plutôt du côté de SWIG, qui va à partir d'un fichier de définition d'interface générer le wrapper python / C++. Tu obtiens une dll avec une seule fonction exportée qui renvoie un PyObject que l'interpréteur Python comprend. Ce PyObject est généré par SWIG et décrit la classe C++ (car y'a des choses plus complexes comme la durée de vie et la conversion des types python <-> C++ à effectuer).
Salut,
Dans ce que j'ai lu de SWIG, il faut le source de la dll.
La dll que je voudrais wrapper n'est pas en C/C++ mais c'est une dll de windev.
Le problème c'est que c'est bien plus complexe qu'un simple nom de fonction, sauf peut être si la fonction ne reçoit / renvoie rien. Il faut convertir les types, et passer d'un monde à l'autre.
Bref à toi de voir, si tu connais bien le sujet. Sinon faudrait peut être faire un wrapper C/C++ de ta dll windev qui va servir à créer un wrapper SWIG
J'approuve (si tant est que je puisse). C'est pas "bénin" comme projet mine de rien.Envoyé par Aurelien.Regat-Barrel
Mouais...sauf que pour ça ausi il faut avoir le détail de ce que contient la DLL, non ? Enfin moi je dis ça...Envoyé par Aurelien.Regat-Barrel
Dans tous les cas faut avoir une petite idée de comment utiliser la dll
Et de ce qu'elle fait. Hum...ok, jeEnvoyé par Aurelien.Regat-Barrel
Si elle n'est pas trop "énorme" (surtout en nombre d'exports) et si tu as une appli. pas trop complexe qui l'utilise, tracer les appels de l'appli. à la DLL peut parfois donner des indices (en plus de ceux éventuellement fournis par les noms des exports).
D'autres indices peuvent être obtenus quand on peut mettre la main sur une version "debug" de la DLL (plein de symboles à lire). C'est parfois le cas avec les versions beta distribuées par certains.
C'étaient les idées du jour...
Ca va pas etre facile, je ne sais plus si ce que je faire est vraiment réalisable finalement.
La dll n'exporte pas énormément de fonctions. Mais je ne sais pas comment elle fonctionne exactement. C'est la dll qui s'occupe des bases de données hyperfile.
Il n'existe pas de ports vers d'autres plateformes que windev.
Et la structure des fichiers (.FIC, .NDX, etc) est-elle complexe ?
Ah ouai... déjà y'a un problème de licence je pense. Je suis pas sûr que tu ais le droit de faire ça.
Envoyé par Aurelien.Regat-Barrel"implémentation d'interfaces"...c'est un peu ce que veut faire notre ami andrei, non ?Envoyé par http://www.april.org/dossiers/dvd-cca/reverse-engineering.html
Si c'était illégal est-ce que les développeurs de Samba (clique ici pour voir), d'OpenOffice.org (pense aux filtres d'import/export), de plusieurs pilotes sous Linux/*BSD/autres, etc(, etc, etc) ne devraient pas avoir des problèmes ?
attention, le reverse engineering, légal ou non, devient illégal de toute façon s'il est interdit dans le contrat de license... (violation du contrat)
Un contrat de licence ne peut pas avoir plus de valeur que la loi.Envoyé par Médinoc
Et la loi dit :Tu peux aussi le lire là.Envoyé par Code de la Propriété Intellectuelle, Article L122-6-1
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager