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 :

export de fonctions d'une DLL en C (ou problème d'import, j'en sais rien)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par défaut export de fonctions d'une DLL en C (ou problème d'import, j'en sais rien)
    Bonjour à tous !

    J'ai besoin d'aide pour exporter les fonction d'une DLL que j'ai créé.
    ou les importer dans un autre programme, je sais pas trop :S

    en gros, j'ai ça :

    fichier.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    #ifdef MADLL_EXPORTS
    #define MADLL_API __declspec(dllexport)
    #else
    #define MADLL_API __declspec(dllimport)
    #endif
     
    #ifdef ___cplusplus
    extern "C"
    {
    #endif
     
    	MADLL_API int Init(int Ma_Variable);
     
    #ifdef ___cplusplus
    }
    #endif
    fichier .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include "Mon_Fichier.h"
    int Init(int Ma_Variable)
    {
    // mon code qui fait qques trucs
    }
    fichier .def
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ; fichier.def : déclare les paramètres de module pour la DLL.
     
    LIBRARY      "mon_Projet"
     
    EXPORTS
    Init = ?Init@@YAHHHHHHHH_N00@Z
    Tout cela sous visual studio.net 2003.
    Tout ce que j'ai essayé me donne des erreurs, là j'en suis à "liaison DLL incohérente" depuis que j'ai modifié mon .h pour ce qu'il y a au dessus, mais ce n'est qu'un warning ! :/
    Lorsque je regarde la DLL avec "quick view plus", j'obtient mes fonctions "décoré" (dûes au __declspec(dllexport)) et mes fonctions "normales" (dûes au .def)

    donc "logiquement", la DLL est bonne ?!

    quand j'essaye de l'inclure à un programme pour la tester, j'obtient une erreur LNK2001, symbole externe non résolu!
    là je sèche.
    je fourni bien le .h, le .lib, je copie la DLL dans le répertoire du projet, ainsi que dans \system32\.
    mais il ne veux pas l'utiliser....

    Est-ce que quelqu'un saurait m'aider ?
    SVP

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Tu ne peux pas avoir les 2, la fonction décorée et la non-décorée car tu n'as qu'une seule qui existe, et c'est celle non décorée, d'où la liaison incohérente.

  3. #3
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par défaut
    tout à fait d'accord, mais cela ne m'inquiete pas trop (sauf si vous me dites que cela pose un réel problème) car les entry point sont les mêmes

    Ordinal Entry Point Name
    0000 0001126c ?Close@@YAHXZ
    0001 000113d9 ?Init@@YAHHHHHHHH_N00@Z
    0002 000112fd ?Write_And_Verify@@YAHPAD@Z
    0003 0001126c Close
    0004 000113d9 Init
    0005 000112fd Write_And_Verify
    donc je ne pense pas que ce soit bloquant (bien que pas très propres j'admet)

    En fait, depuis que je cherche, je désespère sur ce sujet, donc çela ne ma fait pas peur d'avoir deux fois.
    à moins qu'il n'existe une solution pour ne l'avoir qu'une seule fois, et que cela marche

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Le symbole manquant, c'est la fonction décorée ou l'autre ? et attention car même si le symbole est dans le .lib, il n'est pas forcément accessible, il faut qu'il y en ait 2 avec une petite différence sur le 2ème.

  5. #5
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par défaut
    Bonne question ! je ne sais pas trop en fait !

    voilà en gros le programme de "test" de ma DLL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "Mon_Fichier.h"
    #include "afxwin.h" 
    #using <mscorlib.dll>
    using namespace System;
     
    int _tmain()
    {
        Init(1);
     
        return 0 ;
    }
    et l'erreur est : LNK2001 symbole externe non résolu
    "int __cdecl Init (int)" ( ?Init@@YAHHHHHHHH_N00@Z
    )

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Et sans le .def de la bibliothèque, c'est la même erreur ? Tu as bien ajouté le .lib à l'édition des liens ?

  7. #7
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 17
    Par défaut
    "sans le .def" ?
    c'est à dire ?
    ne pas le renseigner ?


    pour le .lib, oui, il est bien ajouté, c'est pour ça que je ne sais pas si c'est à l'exportation ou l'importation que j'ai un pb.

    y-a-t-il un moyen de l'analyser pour savoir ce qu'il contient ?
    car Visual studio l'ouvre comme un fichier binaire

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 01/02/2013, 14h39
  2. [VB]exporter fonction dans une DLL
    Par SubZero2 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/04/2006, 15h59
  3. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 11h30
  4. [VStudio 6] pb avec fonctions dans une DLL
    Par MogDeChNord dans le forum MFC
    Réponses: 8
    Dernier message: 08/01/2004, 08h57
  5. [VB6] Ajouter un commentaire à une fonction d'une DLL
    Par Ace303 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/06/2003, 08h14

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