1

我正在尝试使用InteropServices.Marshal.QueryInterface将 COM 对象转换为 C# 中的特定类型,但在传递第一个和最后一个参数时遇到了麻烦。

我假设这是一个参考,但由于语法错误IntPtr,我无法参考我的类来使用 QueryInterface。IntPtr

当然,下面显示的代码没有正确的语法,但它让您了解我想要做什么。

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. valueset范围内是对 COM 接口的引用,COMInterface

4

1 回答 1

3

你将无法做到这一点。

您拥有的IntPtr是一个指向COMInterface. 您可以拥有一个完全独立的类实现COMInterface,这就是您持有的指针,这是完全可行的。

也就是说,对 的调用QueryInterface只能用于获取对 .NET 表示的引用COMInterface,而不是 ; 的实例ClassA。它需要您将在非托管代码中实现的类的内容塑造COMInterface成托管代码可以理解的内容,然后将其写入ClassA完全不同的东西。

于 2012-09-25T14:43:39.793 回答