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 :

transformer Lib C++ en DLL


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de dsolheid
    Inscrit en
    Décembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Décembre 2007
    Messages : 141
    Par défaut transformer Lib C++ en DLL
    Bonjour à tous,

    Je cherche (pas trouvé de réponse simple) à créer une DLL à partir d'une Lib C++.


    Ensuite, utiliser cette DLL dans des scripts VB (pour automatisation de test)

    J'ai une lib c++ (avec source) qui se construit correctement.

    Dans VS 2005, je peux voir comme propriétés du projet :

    Static Library (.lib)
    Use Standard Windows Libraries
    Not Using ATL

    Comment transformer cette lib en DLL ?
    Via un autre projet ? (car j'ai tj besoins de la lib) ...

    Quelle type de DLL choisir, etc ...

    D'avance merci, ...


    Dieter

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Par défaut
    Bonjour,

    le plus simple est de commencer par créer un nouveau projet de type DLL:
    de mémoire, nouveau projet->win32->DLL..
    Et rajouter les fichiers sources.
    FAQ: http://cpp.developpez.com/faq/vc/?page=DLL#MakeDynDll

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Je l'ai fait il n'y a pas longtemps, et effectivement c'est plutôt délicat.

    Ce que j'ai fait, c'est d'abord connaître les "règles" de développement d'une DLL :
    - Commencer par déterminer ce que tu veux exposer
    - Savoir compiler dans la DLL les objets/fonctions template s'il y en a
    - Limiter les dépendances dans les inclusions qu'aura à faire le projet utilisateur

    Tu dois déterminer la réponse à la première question
    Ensuite, pour les objets/fonctions templates, tu peux proposer des entêtes de fonctions, toujours templates dans les .h, puis les implémenter dans le .cpp. Répéter les fonctions pour chaque types template est long, donc j'ai fait une macro permettant de générer les fonctions/classes comme ça :
    Ce qui revien à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // Exposé dans le .h
    template<class T> __declspec(dllexport) void Test();
     
    // puis la macro
    IMPL_DATA(Class) \
        template<> __declspec(dllexport) void Test<Class>() { \
    		FonctionDeLaDll<Class>(); }
     
    // Dans un .cpp de la DLL
    IMPL_DATA(CMyData)
     
    // Puis dans l'exe
    Test<CMyData>();
    Pour la dernière question, il y a deux solution.
    - Soit proposer une interface, qu'utilisera le projet appelant, l'implémentation s'en voit cachée, donc l'utilisateur reste indépendant des dépendances utilisées.
    - Soit le pImpl Ideom qui propose d'exposer un objet, qui encapsule un pointeur vers l'implémentation. Ainsi, dans le .h exposé, il n'y a qu'une prédéclaration, donc pas d'inclusion. Fait des recherches là dessus, en plus de la technique, ça explique les problématique de création d'une DLL.


    Connaissant ça, j'y suis allé à la barbar en mettant mon projet statique en DLL, et en réglant au fur et à mesure les erreurs de link selon la méthode la plus efficace des deux proposées ci dessus

    Bon courage,

    A bientôt

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/06/2006, 12h50
  2. Réponses: 3
    Dernier message: 07/04/2006, 11h27
  3. Problème pour linker la lib d'une Dll
    Par damien99 dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 23/02/2006, 23h20
  4. Réponses: 5
    Dernier message: 06/12/2005, 17h34
  5. [Pascal UCSD] Fichier .lib associé à une DLL
    Par nikhil dans le forum EDI
    Réponses: 3
    Dernier message: 25/07/2005, 16h02

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