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++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    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 confirm�

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

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    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
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    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 confirm�

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

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    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
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    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
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    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