我正在尝试使用InteropServices.Marshal.QueryInterface
将COM对象转换为C#中的特定类型,但是我无法传递第一个和最后一个参数。
我假设IntPtr
是一个引用,但由于语法错误,我无法让IntPtr
引用我的类来使用QueryInterface。
当然,下面显示的代码没有正确的语法,但它可以让您了解我想要做的事情。
set
{
ClassA a;
Guid guid = Guid.Parse("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
System.Runtime.InteropServices.Marshal.QueryInterface(ref value,
ref guid, out a);
}
编辑:
[ComVisible(true), Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
public ClassA : COMInterface{ ... }
ClassA是C#类,COMInterface
是COM接口。它是唯一实现COMInterface
的类。 value
范围中的set
是对COM接口的引用,COMInterface
答案 0 :(得分:3)
你无法做到这一点。
您拥有的IntPtr
是指向COMInterface
实施的指针。完全可行的是,您可以拥有一个完全独立的类来实现COMInterface
,以及您持有指针的内容。
也就是说,对QueryInterface
的调用只能用于获取对COMInterface
的.NET表示的引用,而不是ClassA
的实例;它需要您将在非托管代码中实现COMInterface
的类的内容整形为托管代码可以理解的内容,然后将其写入ClassA
,这完全是另一回事。