IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

créer un wrapper pour une DLL écrite en C++ sans avoir accès au code source


Sujet :

C++

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut créer un wrapper pour une DLL écrite en C++ sans avoir accès au code source
    Bonjour,

    Je dispose d'une DLL écrite en C++ et je souhaiterais créer un wrapper C de celle-ci.
    Je dispose du fichier .h et du fichier .dll mais je n'ai pas accès au code source (.cpp).

    Est-ce qu'il est possible de créer un wrapper sans le code source ? Si oui, pouvez-vous m'indiquer les démarches à suivre ou si un tutoriel existe je veux bien que vous le partagiez s'il vous plaît ?

    Je vous remercie par avance pour votre aide.

    Bien cordialement.

    Karen

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 034
    Billets dans le blog
    12
    Par défaut
    Salut!

    Pour wrapper une DLL, il faut que tu saches:
    1) Les fonctions qu'elle exporte (faisable en utilisant Dependency Walker, ou en ayant le .h que tu dis avoir)
    2) Les fonctions dont tu as besoin parmi ces fonctions.

    Et donc oui, c'est faisable sans avoir le code source.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 522
    Par défaut
    Il faut aussi avoir le même compilateur, les mêmes versions des librairies et des templates et les mêmes options de compilation utilisés pour compiler un wrapper de Dll.

    C'est tellement con de faire une Dll en C++ qui n'exporte pas une API utilisable en C que je penche pour de l'amateurisme complet.

    Oui, c'est faisable, mais il y a tellement de choses qui peuvent partir en sucette que ...

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut
    Merci pour vos réponses.

    Donc oui je dispose du .h, je peux avoir accès à tous les prototypes présents dans la DLL et je peux donc faire un tri des fonctions que j'ai besoin.

    Pour vous mettre dans le contexte on m'a fourni un dossier avec plusieurs fichiers (.dll, .h et .lib), cette DLL est compilée en C++.
    J'ai besoin de l'importer sous LabVIEW et pour cela on m'a conseillé de créer un wrapper afin de faire le lien avec LabVIEW, notamment dans le cas de l'utilisation de types de données spécifiques au C++.

    Malheureusement je n'ai pas accès au code source pour l'instant, vous m'avez dit qu'il était possible de créer un wrapper sans le code source donc pouvez-vous m'en dire plus s'il vous plait ?

    Je vous remercie par avance.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Cf. la réponse de Bacelar: Si la DLL utilise le moindre type de la STL dans son interface publique, alors tu auras besoin de savoir exactement quel compilo a été utilisé (à la version près!) et utiliser exactement le même, sans quoi c'est peine perdue.

    Si la DLL n'emploie que des types primitifs dans son interface par contre, tu as une chance.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut
    Si j'ai bien compris j'ai peu de chance de réussir.

    Y a t'il un moyen rapide pour savoir si la DLL utilise un certain type de la STL dans son interface publique?

    Je suis encore une débutante donc excusez-moi si c'est une question élémentaire.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 522
    Par défaut
    On t'a bien noirci le tableau mais il y a quand même des chances que cela se passe bien.

    Compilée avec un compilateur C++ ne veut pas dire que le code soit en C++, beaucoup de programmeur C utilise un compilateur C++ parce que c'est plus simple.

    Pour éviter toutes ambiguïté, utilises un outil comme Dependency Walker (http://www.dependencywalker.com/) sur cette dll et postes une copie d'écran.

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Citation Envoyé par karen8304 Voir le message
    Y a t'il un moyen rapide pour savoir si la DLL utilise un certain type de la STL dans son interface publique?
    Je dirais tu obtiens une liste des fonctions exportées et tu regardes si tu vois autre chose que des types primitifs.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par Médinoc Voir le message
    Je dirais tu obtiens une liste des fonctions exportées et tu regardes si tu vois autre chose que des types primitifs.
    Et, à partir du moment où tu as les fichiers d'en-tête relatifs à la dll en question, il devrait être "assez simple" de trouver cette liste :
    • recherche (s'il y en a) toutes les fonctions libres qui présentent un symbole (souvent NOM_DE_LA_LIB_API) entre le type de retour et le nom de la fonction
    • recherche (s'il y en a) toutes les fonctions membres publiques des classes et des structure qui qui présentent un symbole (le même que pour les fonctions libres ) entre le mot clé et le nom de la classe/fonction.
    • recherche les éventuels alias de type (#define machi, qui seraient une aberration et typedef ou using untype = autrechose )
    • vérifie le type de retour et celui des paramètres de ces fonctions

    (NOTA : il n'est pas exclu que le symbole soit remplacé directement par __stdcall(dllimport) , vu que les fichiers d'en-tête peuvent avoir été prévu spécifiquement pour l'utilisation de la dll et non pour sa compilation )
    Cela devrait déjà te permettre de trouver une grande majorité des fonctions auxquelles tu as accès au travers de ta dll
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 28
    Par défaut
    Merci pour vos réponses, je vais essayer d'avancer de mon côté et je reviendrais vers vous si j'ai de nouvelles questions.

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 522
    Par défaut
    L'utilisation de Dependency Walker peut être un peu cryptique, n'hésites pas à poster les copies d'écran et à poser tes interrogations.

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/06/2005, 21h45
  2. Créer un index pour une Base de données
    Par john7 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 31/01/2005, 21h43
  3. result: chaine de caractère pour une DLL
    Par Sephiroth Lune dans le forum Langage
    Réponses: 7
    Dernier message: 27/07/2004, 23h05
  4. Utilisation d'une dll écrite en delphi 5 dans VB6
    Par Jean-Louis dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2002, 09h19
  5. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 21h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo