是否有可能有一个通过的 COM 方法HWND
?在我的对象中使用以下方法CoCreateInstance
返回DISP_E_BADVARTYPE
(0x80020008
):
STDMETHODIMP ShowDialog(HWND hWndParent);
到目前为止,我通过传递一个OLE_HANDLE
然后铸造它来解决这个问题,但感觉就像一个杂物:
STDMETHODIMP ShowDialog(OLE_HANDLE hWndParent);
我认为 HWND 是一个指向结构的指针,这就是为什么你不能在 IDL 中使用它的原因。
如果您查看 Microsoft Typelibs,您将看到有关如何传递句柄的各种变化(从 int 到 long 到 HANDLE)。
您的界面可能注册为“双重”,而 HWND 不是 OLE 自动化支持的类型之一。您的界面是否需要与 IDispatch 兼容(您是否需要从脚本或后期绑定语言中调用它)?如果没有,从 IUnknown 而不是 IDispatch 派生并且不注册为双重将帮助您。
注意:只要您只使用过程中的方法,铸造就可以了。