原生c++;使用C++;包装纸 我们面临互操作问题,我们在C++中编写客户端exe,在COMDLL和一个本地C++静态库中编写了一些遗留代码。 我们需要使用这两种方法来完成C#client中的功能 在C#代码中创建COM类的实例。现在,COM类方法采用的是Nc++ C++对象,COM中的一些方法 类需要参数,这些参数是C++静态库中声明的类的对象。因为我们不能创建C++原生类的实例 在C#中,我们决定在本机类上编写C++/CLI包装器,并在C#代码中创建warpper的实例,并通过 warpper并将其传递给C#client中创建的COM类。问题是,当我们将本机对象指针(作为IntPtr)传递给COM类时,我们并没有将本机对象初始化为其值。有什么问题吗?我们如何通过托管的C++包装将原生对象传递给C?

原生c++;使用C++;包装纸 我们面临互操作问题,我们在C++中编写客户端exe,在COMDLL和一个本地C++静态库中编写了一些遗留代码。 我们需要使用这两种方法来完成C#client中的功能 在C#代码中创建COM类的实例。现在,COM类方法采用的是Nc++ C++对象,COM中的一些方法 类需要参数,这些参数是C++静态库中声明的类的对象。因为我们不能创建C++原生类的实例 在C#中,我们决定在本机类上编写C++/CLI包装器,并在C#代码中创建warpper的实例,并通过 warpper并将其传递给C#client中创建的COM类。问题是,当我们将本机对象指针(作为IntPtr)传递给COM类时,我们并没有将本机对象初始化为其值。有什么问题吗?我们如何通过托管的C++包装将原生对象传递给C?,c#,c++-cli,native,C#,C++ Cli,Native,我从未使用过COMObject.Initialize(x),不知道它是做什么的 但是,如果您想从IntPtr中获取IUnknown,可以执行以下操作: object pUnk = Marshal.GetObjectForIUnknown(objPtr); 另请参见:一个COM方法,它采用的原始指针与自动化不兼容。在这种情况下,COM方法使用COM接口指针是很不寻常的。最好使用对象浏览器检查类型库转换后的外观。当参数类型为object时,您遇到了一个问题 您最好保留C++/CLI中的COM接口代

我从未使用过COMObject.Initialize(x),不知道它是做什么的

但是,如果您想从IntPtr中获取IUnknown,可以执行以下操作:

object pUnk = Marshal.GetObjectForIUnknown(objPtr);

另请参见:

一个COM方法,它采用的原始指针与自动化不兼容。在这种情况下,COM方法使用COM接口指针是很不寻常的。最好使用对象浏览器检查类型库转换后的外观。当参数类型为object时,您遇到了一个问题


您最好保留C++/CLI中的COM接口代码。

初始化不是COM方法,它是我们自己的方法,它以实参C++ C++对象作为参数。p> 它不应该读为

COMObject.Initialize(objPtr)
?谢谢paul更正了它
object pUnk = Marshal.GetObjectForIUnknown(objPtr);