我可以在COM方法中传递HWND吗?

时间:2009-04-30 19:46:54

标签: windows com hwnd

是否可以使用传递HWND的COM方法?在我的对象CoCreateInstance中使用以下方法返回DISP_E_BADVARTYPE0x80020008):

STDMETHODIMP ShowDialog(HWND hWndParent);

到目前为止,我通过传递OLE_HANDLE然后投射它来解决这个问题,但感觉就像一块污泥:

STDMETHODIMP ShowDialog(OLE_HANDLE hWndParent);

2 个答案:

答案 0 :(得分:2)

我认为HWND是指向结构的指针,这就是为什么你不能在IDL中使用它 如果您查看Microsoft Typelibs,您将看到有关如何传递句柄的各种变体(从int到long到HANDLE)。

答案 1 :(得分:1)

您的界面可能注册为“dual”,而HWND不是OLE自动化支持的类型之一。您的界面是否需要与IDispatch兼容(您是否需要通过脚本或后期绑定语言调用它)?如果没有,从IUnknown而不是IDispatch派生而不注册为dual将帮助你。

注意:只要您只使用进程中的方法,就可以进行投射。