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

Langage C++ Discussion :

appel class depuis dll


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 175
    Par défaut appel class depuis dll
    bonjour,

    J ai créé une dll et créé des méthodes afin de les utiliser.

    Maintenant j'aimerais que ma dll puisse appeler un fichier dans le quel se trouve des méthodes déja existantes.

    Ce fichier est construit comme suit:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    class CFileTxt : public CFile
      {
    public:
       //--- methods for working with files
       int               Open(const string file_name,int open_flags);
       //--- methods for data access
       uint              WriteString(const string value);
       string            ReadString();
      };
     
    int CFileTxt::Open(const string file_name,int open_flags)
      {
       int result=CFile::Open(file_name,open_flags|FILE_TXT);
    //---
       return(result);
      }
     
    uint CFileTxt::WriteString(const string value)
      {
    //--- checking
       if(m_handle<0) return(0);
    //---
       return(FileWriteString(m_handle,value));
      }
     
    string CFileTxt::ReadString()
      {
    //--- checking
       if(m_handle<0) return("");
    //---
       return(FileReadString(m_handle));
      }

    Comment puis je appeler ces méthode a travers la dll ?
    Quelqu'un aurait il un tuto dans ce sens ou une piste ?

    merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 500
    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 500
    Par défaut
    Cela est fonction du compilateur et je vous décourage de faire des API C++ pour vos Dll. Une API C est bien plus facile à utiliser dans le cas ou le client de la dll est indépendant de celle-ci.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 175
    Par défaut
    Je crée mes dll avec Visual C++ express 2010 . Mais je peu passer sous C, la différence est minime.

    Est ce que je peu faire un import sur un fichier qui contient ma class et mes méthodes, mais qui n'est pas en extension dll et pouvoir spécifier son chemin?

    merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 500
    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 500
    Par défaut
    Visual C++ express 2010 est un IDE, un éditeur de texte amélioré.
    Mais je peu passer sous C, la différence est minime.
    C n'est pas un IDE, mais un langage avec des conventions de décoration standardisées, rendant les API utilisant ces conventions interopérables avec quasiment tous les langages.
    Et minime, comme il n'y a pas de classe en C, j'ai du mal à voir le minime là.

    "extension dll"???, les celles extension dll que je connaissent sont des dll MFC, rien à voir avec une dll conventionnelle.

    Comment puis je appeler ces méthode a travers la dll ?
    On n'appel pas à travers un dll des méthodes, mais il faut que la dll exporte ces méthodes.

    Quand vous créez un projet DLL sous Visual C++ 2010, une constante de compilation ayant un nom de la form %NomDuProjetM_EXPORTS est déclarée.

    Utilisez cette constante de compilation pour faire en sorte qu'une MACRO soit étendue en "__declspec( dllexport )" ou en "__declspec( dllimport )" en fonction que "%NomDuProjetM_EXPORTS" soit ou ne soit pas déclaré.(http://msdn.microsoft.com/en-us/library/3y1sfaz2.aspx)

    Si le nom de cette MACRO est TOTOAPI par exemple, cela donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifdef %NomDuProjet%_EXPORTS
    #define TOTOAPI __declspec( dllexport )
    #elseif
    #define TOTOAPI __declspec( dllimport )
    #endif
    Vous n'avez qu'à ajouter TOTOAPI devant toutes les fonctions (et les classes mais je vous le déconseille) que vous voulez exporter.

    dans le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TOTOAPI void fonction1();
    dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TOTOAPI void fonction1(){}
    Mais cela fera un export avec des conventions de décorations de nom C++ non standardisées.

    Pour utiliser les conventions C et non C++, il suffit d'encadrer l'ensemble des fonctions devant être exportées avec extern "C" {...}.

    dans le .h
    dans le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    extern "C" {
    ...
    TOTOAPI void fonction1();
    ...
    }
    dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    extern "C" {
    ...
    TOTOAPI void fonction1(){}
    ...
    }
    Avec ça, VC++ génèrera une dll mais aussi un fichier .lib que vous pourrez directement utilisé dans le projet utilisant les fonctions exportés de la dll. Le .h de la dll pourra être directement utilisé par le projet utilisant la dll car il ne déclare pas de constante de compilation "%NomDuProjet%_EXPORTS.

Discussions similaires

  1. appel class depuis build.xml
    Par batbat52 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 29/04/2011, 14h08
  2. Appel d'un DLL fortran depuis vb 2008 express
    Par zerbault dans le forum VB.NET
    Réponses: 2
    Dernier message: 14/09/2010, 04h40
  3. Appel d'une DLL en C# depuis un executable fortran
    Par c.rollet dans le forum C++/CLI
    Réponses: 9
    Dernier message: 21/08/2008, 09h52
  4. Appel d'une DLL C depuis VB
    Par oliver_mpt dans le forum Windows
    Réponses: 6
    Dernier message: 13/06/2008, 14h40
  5. Réponses: 2
    Dernier message: 26/11/2007, 12h22

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