Nous sommes confrontés à un problème d'interopérabilité, nous écrivons un client exe en C#, nous avons du code hérité écrit dans COM dll et une bibliothèque statique C++ native. Nous avons besoin d'utiliser les deux pour compléter les fonctionnalités du client C#. Nous avons ajouté la référence à COM dll en utilisant interop et en mesure de créer instance de la classe COM dans le code C#. Maintenant, ces méthodes de classe COM prennent des arguments qui sont des objets de C++ natif. Certaines classes de la classe COM ont besoin d'arguments qui sont des objets de classes déclarés dans la bibliothèque statique C++. Puisque nous ne pourrons pas créer d'instance de classes natives C++ dans C#, nous avons décidé d'écrire un wrapper C++/CLI sur une classe native et de créer une instance de warpper en code C# et d'accéder à l'instance de classe native via warpper et de la passer en classe COM créé en client C# Le problème est que lorsque nous passons le pointeur d'objet natif (comme IntPtr) à la classe COM, nous n'initialisons pas l'objet natif à ses valeurs. quel pourrait être le problème? Comment nous passons l'objet natif à travers un wrapper C++ géré vers du code C#?Instance C++ native dans le code managé en utilisant C++ wrapper
//Natvie C++ class
class __declspec(dllexport) CConfiguration
{
public :
CConfiguration(void);
virtual ~CConfiguration(void);
void SetIPAddress(const char *IPAddress);
void SetPort(const char*Port);
void GetIPAddress(char *IPAddress);
void GetPort(char *Port);
Private:
std::string IPAddress;
std::string Port;
}
//Managed C++ Class
public ref class ManagedConfigruation
{
public :
ManagedConfigruation(){}
~ManagedConfigruation(){}
CConfiguration *myConfiguration;
IntPtr GetObjectOfConfigurationPtr();
}
IntPtr ManagedConfigruation::GetObjectOfConfigurationPtr()
{
myConfiguration = new CConfiguration();
myConfiguration.SetIPAddress("127.0.0.1");
myConfiguration.SetPort("6200");
//Convert native object to IntPtr and return to C# class
return System::IntPtr(myConfiguration);
};
//C# class on client exe
public class CSharpClass
{
//Wrapper of Managed C++ class
ManagedConfiguration objManagedConfiguration = new ManagedConfiguration();
IntPtr objPtr = objManagedConfiguration.GetObjectOfConfigurationPtr();
//Belwoo COMObject needs object of type CConfiguration native C++ class
COMObject.Initialize(objPtr); //Here is the problem object does not contain anything
}
Ne devrait-il pas lire 'COMObject.Initialize (objPtr)'? –
Merci paul l'a corrigé –