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:
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:
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
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...