如何获取指向接口的指针?

时间:2011-02-23 07:41:08

标签: c# interop

我正在尝试执行此功能:

public static int QueryInterface(
    IntPtr pUnk,
    ref Guid iid,
    out IntPtr ppv
)

,其中

pUnk
Type: System.IntPtr
The interface to be queried.

基本上,Marshal.QueryInterface从COM对象请求指向指定接口的指针。我想查询一些接口(全部来自IPersist),那么如何获取这些接口的引用指针呢?

注意:IPersistStorage就是其中之一。

编辑(这可行):

// Use the CLSID to instantiate the COM object using interop.
Type type = Type.GetTypeFromCLSID(myGuid);
Object comObj = Activator.CreateInstance(type);

// Return a pointer to the objects IUnknown interface.
IntPtr pIUnk = Marshal.GetIUnknownForObject(comObj);
IntPtr pInterface;
Int32 result = Marshal.QueryInterface(pIUnk, ref myGuid, out pInterface);

1 个答案:

答案 0 :(得分:4)

阅读Marshal.QueryInterface()页面上备注部分的最后一行。

  

QueryInterface方法公开COM对象的IUnknown::QueryInterface方法,该方法尝试获取特定的接口指针。 [...]要获得代表IntPtr界面指针的IUnknown值,您可以拨打Marshal.GetComInterfaceForObjectMarshal.GetIUnknownForObjectMarshal.GetIDispatchForObject

我相信你正在寻找Marshal.GetComInterfaceForObject()方法。