2009-04-30 2 views
1

Возможно ли иметь COM-метод, который передает HWND? С следующий метод в моем объекте CoCreateInstance возвращает DISP_E_BADVARTYPE (0x80020008):Могу ли я передать HWND в методе COM?

STDMETHODIMP ShowDialog(HWND hWndParent); 

До сих пор я получаю обойти эту проблему, передавая OLE_HANDLE затем бросая его, но он чувствует, как cludge:

STDMETHODIMP ShowDialog(OLE_HANDLE hWndParent); 

ответ

2

Я думаю, что HWND является указателем на структуру, поэтому вы не можете использовать его в IDL.
Если вы посмотрите на Microsoft Typelibs, вы увидите всевозможные варианты того, как передать дескриптор (от int до long to HANDLE).

1

Ваш интерфейс, вероятно, зарегистрирован как «двойной», а HWND не является одним из типов, поддерживаемых автоматизацией OLE. Должен ли ваш интерфейс быть совместимым с IDispatch (нужно ли его вызывать на скриптах или на поздних языках)? Если это не так, то вы получите от IUnknown, а не IDispatch и не регистрируясь как двойное.

NB: Кастинг в порядке, если вы используете только метод в процессе.

Смежные вопросы