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 :

[DLL] Exports bizzares


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 88
    Points : 59
    Points
    59
    Par défaut [DLL] Exports bizzares
    Bonjour à tous,

    Je désire exporter certaines fonctions dans une DLL pour réaliser un plugin pour le logiciel Virtools (pour les connaisseurs).
    J'exporte chaqune de ces fonction avec l'expression __declspec(dllexport).

    Mes fonctions sont bien exportées dans la DLL, mais le plugin n'est pas chargé par le soft.

    Une des fonctions est par exemple CKGetPluginInfo.

    Si j'étudie avec Dependency Walker (outil VS6) la DLL d'un plugin qui marche, je vois l'entrée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CKGetPluginInfoCount

    Si j'étudie ma DLL, l'entrée correspondante à cette fonction ressemble plutot à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ?CKGetPluginInfoCount@@YAHXZ

    Il y a effectivement un problème, mais je ne sais pas à quoi correspondent ces caractères, et comment y remédier.

    Vous avez des idées ? Merci d'avance !
    "Dis oui à celui qui te dit non, et il te dira peut-être.", Gogoye - Les Proverbes à la Con

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Si j'étudie ma DLL, l'entrée correspondante à cette fonction ressemble plutot à ca :

    Code:

    ?CKGetPluginInfoCount@@YAHXZ
    cela s'appelle du "name mangling"
    Explication : le compilateur C++ "mange" les déclarations de variables et procédures
    Quelqu'un donnera une explication plus détaillée à ce sujet j'en suis certain ; je crois que cela vient du fait qu'en C++ les pointeurs de fonctions sont rangées dans une table particulière

    Seule solution : faire un fichier source avec extension .c et non .cpp et déclarer les fonction avec __declspec(dllexport) ce qui est il me semble déjà fait ( ou bien extern "C" )

  3. #3
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 88
    Points : 59
    Points
    59
    Par défaut
    J'avoue que je n'ai pas compris grand chose... je vais faire une petite recherche du "name magling" sur le net.

    En plus, ca ne m'arrange pas d'ecrire ces fonctions dans un .c

    Merci quand même!
    "Dis oui à celui qui te dit non, et il te dira peut-être.", Gogoye - Les Proverbes à la Con

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Bonjour,

    Fais une recherche sur à propos de la décoration des noms (noms décorés) dans les DLL et de extern "C". Je pense que ça résoudra ton problème.

    au lieu de mettre pour chaque fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    __declspec(dllexport) type maFonction(param);
    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define EXPORT extern "C" __declspec(dllexport)
     
    EXPORT type maFonction(param);
    je ne pense pas que changer l'extension .cpp en .c change quelquechose ? si quelqu'un a plus d'infos là-dessus...
    je n'ai écris que 3/4 DLL, mais l'extension était .cpp.

  5. #5
    mat.M
    Invité(e)
    Par défaut
    En plus, ca ne m'arrange pas d'ecrire ces fonctions dans un .c
    Ma perché ? si les noms sont édulcorés c'est parce que tu utilises des méthodes abstraites dans une classe , alors ?


    Virtools ils ne proposent pas des exemples dans leur SDK ??????

    je ne pense pas que changer l'extension .cpp en .c change quelquechose ? si quelqu'un a plus d'infos là-dessus...
    eh bien BigBoomShakala , je crois qu'un fichier avec l'extension .c appelle le compilateur c spécifique et inversement C++ pour un fichier .cpp
    Attention : cela reste à vérifier , ce que j'ai écris

  6. #6
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par mat.M
    un fichier avec l'extension .c appelle le compilateur c spécifique et inversement C++ pour un fichier .cpp
    ce que je voulais dire c'est qu'on peut faire une DLL avec le code dans un .c ou .cpp. mais je ne sais pas qu'elle sera la différence entre compiler en C et compiler en C++.

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par bigboomshakala
    Citation Envoyé par mat.M
    un fichier avec l'extension .c appelle le compilateur c spécifique et inversement C++ pour un fichier .cpp
    ce que je voulais dire c'est qu'on peut faire une DLL avec le code dans un .c ou .cpp. mais je ne sais pas qu'elle sera la différence entre compiler en C et compiler en C++.
    En C++ il y aura des warnings en plus (si on met pas le type pour les malloc par exemple), en C le compilo n'acceptera pas pas qu'on déclare une variable en plein milieu d'un code, mais je ne sais pas s'il y a de grosses différences dans l'exe produit.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

Discussions similaires

  1. DLL export de fonction __stdcall
    Par slate dans le forum Windows
    Réponses: 1
    Dernier message: 07/06/2006, 10h52
  2. DLL export de fonction avec argument
    Par slate dans le forum C
    Réponses: 3
    Dernier message: 31/05/2006, 10h36
  3. [Dll] Exportations de procedures Overload
    Par Clorish dans le forum Langage
    Réponses: 6
    Dernier message: 20/07/2005, 10h19
  4. [Dll] Exportation de structures
    Par Leo_ dans le forum Windows
    Réponses: 2
    Dernier message: 11/07/2005, 17h36
  5. Réponses: 4
    Dernier message: 07/12/2002, 07h34

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