我正在尝试执行此功能:
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);
答案 0 :(得分:4)
阅读Marshal.QueryInterface()
页面上备注部分的最后一行。
QueryInterface方法公开COM对象的IUnknown::QueryInterface方法,该方法尝试获取特定的接口指针。 [...]要获得代表IntPtr界面指针的IUnknown值,您可以拨打Marshal.GetComInterfaceForObject,Marshal.GetIUnknownForObject或Marshal.GetIDispatchForObject。
我相信你正在寻找Marshal.GetComInterfaceForObject()
方法。