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