Мы сталкиваемся с проблемой взаимодействия, мы пишем exe-клиент на C #, у нас есть некоторый устаревший код, написанный на COM dll, и одна нативная статическая библиотека C ++.Нам потребовалось использовать оба из них для завершения функциональности в клиенте C #. Мы добавили ссылку на COM dll с помощью взаимодействия и смогли создать экземпляр класса COM внутри кода C #.Теперь этот метод класса COM принимает аргументы, которые являются объектами nactive C ++. Некоторым методам в классе COM нужны аргументы, которые являются объектами классов, объявленных в статической библиотеке c ++.Поскольку мы не сможем создать экземпляр собственных классов C ++ в C #, мы решили написать оболочку C ++ / CLI для собственного класса, создать экземпляр warpper в коде C #, получить доступ к экземпляру собственного класса через warpper и передать его в класс COM, созданныйКлиент C #Проблема в том, что когда мы передаем собственный указатель объекта (как IntPtr) в COM-класс, мы не получаем собственный объект, инициализированный его значениями.В чем может быть проблема?Как мы возвращаем нативный объект через управляемую оболочку c ++ в код C #?
//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
}