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 :

Utilisation d'une classe exportée d'une dll (dynamique)


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    Points : 5
    Points
    5
    Par défaut Utilisation d'une classe exportée d'une dll (dynamique)
    Salut tout le monde,
    J'aimerai savoir comment il faut faire pour exporter une classe à partir d'une dll non-MFC avec liaison explicite, donc sans utiliser de bibliotèque de librairie (.lib) dans le projet utilisant la dll. J'aimerai ainsi pouvoir créer une instance de cette classe dans le programme client pour utiliser les méthodes de celle-ci. Je débute dans l'utilisation des dlls, en esperant que vous pourrez m'éclairer sur mon problème, je vous remercie d'avance...

    @++ et bonne prog' @tous

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je crois que la seule méthode est de déclarer toutes tes fonctions membres virtuelles, ainsi c'est la v-table qui permettra la liaison dynamique entre le client et la DLL.
    Il faudra également allouer et détruire les intances de la classe dans la DLL (il faudra donc prévoir des fonctions genre MaClasse* CreateMaClasse() et void DestroyMaClasse(MaClasse*)).

    Avec ça, ça devrait être bon.

  3. #3
    mat.M
    Invité(e)
    Par défaut
    Je conseillerais plutôt de créer une dll ATL-COM dont le but technologique est justement de gérer des interfaces d'objets.
    Les objets COM ont été crées spécifiquement pour cela.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Moi je pense que c'est pas possible, du moins d'une manière compatible entre plusieurs compilos. Je ne crois pas que la vtable garantisse que les fonctions soient rangées dans le même ordre pour tous les compilos. Plus les problèmes de name mangling, etc... Je rejoins l'avis de mat.M : faire du COM.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour vos réponses, il est donc impossible de faire ce que je veux sans utiliser la technologie COM...Donc avec le COM on peut instancier une classe et en utiliser ses méthodes ? L'utilisation du COM résulte en l'utilisation d'une dll spécifique ? Je sais je pose pas mal de question là, mais je n'ai jamais utilisé cette technologie, vous auriez pas des liens pour apprendre à utiliser le COM ? Je vous remercie d'avance, je vais faire des recherches...

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Disons que c'est possible, mais assez périlleux. Ca va marcher pour ton compilateur et avec la même version. Si tu veux faire des plugin, c'est pas top. Alors qu'avec COM le plugin pourrait etre fait en C, C++, Delphi, VB, ... ca marche. Mais COM c'est assez complexe. ATL ça te simplifie le travail, mais bon ça reste un poil ardu. Tu as une très bonne FAQ sur COM dans la page de liens.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    Points : 5
    Points
    5
    Par défaut
    Ok, merci.
    Je vais regarder la FAQ sur COM.
    La partie code pour les jeux vidéos est souvent répartie dans différentes dll, vous pensez qu'ils utilisent quel type de dll ? Des dlls avec liaison implicite alors ? Moi, ce n'est pas pour faire des plugins c'est plutôt dans le but de répartir le code de mon projet de jeu dans des dlls, et surtoutpour profiter des améliorations qu'apportent l'utilisation des dlls, principalement au niveau des performances et aussi pour la maintenance.

    Encore merci de me répondre, aussi rapidement...

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    La partie code pour les jeux vidéos est souvent répartie dans différentes dll, vous pensez qu'ils utilisent quel type de dll ? Des dlls avec liaison implicite alors ?
    En général oui. C'est nettement plus simple.

    Moi, ce n'est pas pour faire des plugins c'est plutôt dans le but de répartir le code de mon projet de jeu dans des dlls, et surtoutpour profiter des améliorations qu'apportent l'utilisation des dlls, principalement au niveau des performances et aussi pour la maintenance
    Disons qu'il ne faut pas non plus étaler son code dans plein de DLL. Niveau performances tu y perdras un peu, et niveau maintenance, si tu sépares bien ton code en modules tu peux tout aussi bien utiliser ceux-ci en bibliothèques statiques.
    Le principal interêt des DLLs est de pouvoir faire charger et executer du code à une appli sans recompiler celle-ci, donc en gros tout ce qui se rapproche d'un système de plugins.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    Points : 5
    Points
    5
    Par défaut
    L'utilisation de DLLs entrainent des pertes de performance? Ah, je ne savais pas, autant pour moi, mais je suppose que cette perte est minime? C'est surtout lors de l'utilisation de DLL importante, où ça peut augmenter le temps de chargement du programme client, je me trompe ? En tout cas merci beaucoup de votre aide , je vais donc me tourner vers l'utilisation de DLL avec liaison implicite ça sera beaucoup plus simple. Sinon, je ne compte pas du tout étaler mon code dans plein de DLLs, mais par exemple mettre le "moteur 3D" dans une DLL.

    Merci de m'avoir éclairé sur les DLLs, ça va m'éviter de longues heures de recherches , car il n'y a pas beaucoup de documentation sur celles-ci, sur le net...

    @++

Discussions similaires

  1. Utilisation d'une classe C++ dans une classe C#
    Par Masmeta dans le forum C++/CLI
    Réponses: 1
    Dernier message: 01/07/2015, 21h59
  2. Réponses: 7
    Dernier message: 25/08/2008, 16h13
  3. Réponses: 2
    Dernier message: 02/02/2008, 07h37
  4. Réponses: 27
    Dernier message: 03/01/2008, 11h07
  5. Réponses: 8
    Dernier message: 20/07/2007, 14h28

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