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
    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
    Membre extr�mement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    D�tails du profil
    Informations personnelles :
    �ge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    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