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++/CLI Discussion :

C++ COM DLL classe héritée


Sujet :

C++/CLI

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut C++ COM DLL classe héritée
    Bonjour,

    Voici mon problème.
    Je porte une application de Borland C++ vers Visual C++/C#.
    Cette application utilise des bibliothèques COM (DLL) écrites en C++ non managé.

    Dans ces librairies, j'ai une class d'interface IVehicule qui est virtuelle.
    IVehicule est définie comme une classe COM dans la librairie.
    J'ai une DLL "Car" qui fournit une classe CCar qui implémente l'interface IVehicule.
    J'ai une DLL "Bike" qui fournit une classe CBike qui implémente l'interface IVehicule.
    J'ai une DLL "Truck" qui fournit une classe CTruck qui implémente l'interface IVehicule.

    Je veux créer un objet COM véhicule (CCar par exemple) en C++.
    Comme je dois communiquer avec du code C# (l'IHM), je dois utiliser du C++ managé.

    J'utilise donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjectHandler ObjH = CreateInstanceFrom(InteropDllName, CCarName)
    L'utilisateur choisit le véhicule qu'il veut utiliser. Je détermine InteropDllName et CCarName dynamiquement à partir des informations trouvées dans la base de registre.

    Mon problème est de convertir ObjH en IVehicule* pVehicule.

    Je pense devoir utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IVehicule^ mpVehicule = (IVehicule^)(ObjH.UnWrap());
    Mais je ne peux pas utiliser IVehicule^ car IVehicule est Virtuel.

    En Borland C++ un type TComInterface<IVehicule> était utilisé mais je ne trouve pas d'équivalent sous Visual C++.
    J'ai essayé les _com_ptr_t ou CComPtr mais ça ne marche pas car IVehicule est virtuel.

    J'ai essayé de créer un objet managé qui implémente IVehicule mais un objet managé ne peut hériter que d'une classe managée (ref class) ou d'une classe interface.
    Et IVehicule n'est pas considéré comme une classe d'Interface.
    Pourtant ça le devrait...

    Une contrainte est de pouvoir ajouter des véhicules sans modifier le programme mais simplement en ajoutant une DLL, son fichier d'interopérabilité et d'ajouter des entrées dans la base de registre. Je ne peux donc pas utiliser dans le code CCar, CBike ou CTruck.

    Merci pour toute aide,
    zFlorent

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut C++/CLI,appel à interface com
    bonjour,
    regarde dans ces 2 articles de la msdn lib help qui donne un exemple d'un wrapper CRCW à ecrire par vos soins.
    je cite "Visual C++ peut utiliser directement les objets COM à l'aide des mécanismes COM habituels (tels que CoCreateInstance et QueryInterface). "

    1er article:
    --------------
    Utilisation de serveurs COM natifs à partir du .NET
    http://www.google.fr/url?sa=t&source...399fqD3I7azYvw

    2eme article :
    ---------------
    Comment : utiliser des serveurs COM natifs avec CRCWs

    http://www.google.fr/url?sa=t&source...399fqD3I7azYvw

    Il y a bien sur l'utilitaire Type Library Importer (Tlbimp.exe) si la dll a ete compile avec une bibliotheque de type(genere par compilateur Midl).
    Tlbimp.exe genere directement un assembly wrapper.
    Passer par Tlbimp.exe est le seul moyen pour un utilisateur vb ou c#
    Par contre les 2 articles cites ci-dessus sont à l'usage des gens qui ecrivent c++ ou c++/cli et peuvent se passer de la biblitheque de type et de MIDL.
    bon code...

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/08/2006, 15h12
  2. création d'une dll (classe c++)
    Par TheShadow dans le forum MFC
    Réponses: 4
    Dernier message: 10/04/2006, 16h21
  3. Liens entre des classes héritées
    Par qwiqwi dans le forum C++
    Réponses: 12
    Dernier message: 09/02/2006, 15h36
  4. Réponses: 2
    Dernier message: 04/12/2005, 21h10
  5. [DLL/classe template] problème de link
    Par Bob.Killer dans le forum C++
    Réponses: 7
    Dernier message: 31/08/2005, 18h56

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