如何调用需要IntPtr
参数的接口方法?如果我的方法需要 ,这可以正常工作string
,但如果需要IntPtr
. 这是 C# 中的示例接口:
[
Guid("etc-etc-etc"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch),
ComVisible(true)
]
public interface ICallback
{
[DispId(1)]
void CallbackWithString( string value );
[DispId(2)]
void CallbackWithHandle( IntPtr value );
}
我从这个接口派生了一个 C# 中的 COM 类,并将它的调度传递给我的 C++ 应用程序(通过 COM)。稍后,该 C++ 应用程序在该调度上调用我的方法,以将通知提供回 C# 应用程序。
这有效:
CComPtr<IDispatch> obj; // My C# COM interop object, stored in my C++ app
VARIANT arg;
arg.vt = VT_BSTR;
arg.bstrVal = myString;
obj.InvokeN( L"CallbackWithString", &arg, 1 );
这不起作用:
arg.vt = VT_HANDLE; // I also tried VT_BYREF, VT_VOID|VT_BYREF, and VT_INT_PTR
arg.byref = myHandle;
obj.InvokeN( L"CallbackWithHandle", &arg, 1 );
“不起作用”是指未调用该函数,但不会引发异常。
是否可以IntPtr
通过 COM 互操作发送?如果是这样,怎么做?