3
如何調用需要參數IntPtr
的接口方法?如果我的方法需要string
,則工作得很好,但如果需要IntPtr
,則不會。下面是C#示例接口:通過COM interop傳遞IntPtr
[
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);
通過 「不工作」,我的意思是函數不叫,但沒有引發異常。
是否可以通過COM interop發送IntPtr
?如果是這樣,怎麼樣?
感謝漢斯。如果我的參數聲明爲「IntPtr」,它仍然不起作用。我必須將其更改爲一個整數。儘管我只使用32位代碼,但我使用了'UInt64'。我寧願不這樣做,並使用'IntPtr',但這似乎是一個沮喪的祕訣。 – paddy