C++ cli 在托管C&x2B中代表IUnknown+;

C++ cli 在托管C&x2B中代表IUnknown+;,c++-cli,iunknown,C++ Cli,Iunknown,我在C++/CLI中为C静态库构建包装器,以便通过C在.NET应用程序中使用# 我在C中有这样的函数 long My_COM_接口(PVOID hDevice,IUnknown**punnown); 如何在C++/CLI中声明IUnknown** 对于第一个参数,我使用IntPtr,但无法找到IUknown的替代品 我在另一个函数中有另一个COM数据类型GUID这对我来说也是个问题 请帮助我找到数据类型IUnknown和GUID的关系。我会参考API,例如 public static Int

我在C++/CLI中为C静态库构建包装器,以便通过C在.NET应用程序中使用#

我在C中有这样的函数

long My_COM_接口(PVOID hDevice,IUnknown**punnown);
如何在C++/CLI中声明
IUnknown**

对于第一个参数,我使用IntPtr,但无法找到IUknown的替代品

我在另一个函数中有另一个COM数据类型GUID这对我来说也是个问题


请帮助我找到数据类型IUnknown和GUID的关系。

我会参考API,例如

 public static IntPtr GetIUnknownForObject(Object o);

这个API可以简单地从C++/CLR中使用,并建议您应该使用IntPtr^

尝试使用以下参数:

ref object pUnknown
像这样使用它

MyObject o = pUnknown as MyObject
没有替代品


C++/CLI完全理解本机类型。包括正确的头文件,您可以像往常一样使用
IUnknown*

对于“void*”,您应该在c#@EmirAkaydın中使用“ref IntPtr”,但问题是关于c++/CLI,而不是c#。实际上,您不应该,至少不应该在公共方法上。如果您这样做,您将不得不在使用您的库的任何其他.net程序集上使用指针,这是不理想的。@yms:C++/CLI类应该完全包装本机对象,这样使用您的库的其他程序集就永远不会知道存在
IUnknown*
,不用担心。但问题是如何声明一个使用IUnknown的方法,所以答案不能是只使用IUnknown…@yms:但它与使用C代码有关,而与构建托管接口供其他.NET代码使用无关。@yms:您曾经构建过这样的包装器吗?我已经,很多次了。在实现中,您使用所有常用的本机指针类型。.NET使用者使用的包装器的公共接口是C++/CLI中定义的
ref类
类型。使用者看不到本机指针,只看到一组托管方法(可用行为,在内部使用指针、本机库调用和Win32 API等)。