Могу ли я передать HWND в методе COM? - PullRequest
2 голосов
/ 30 апреля 2009

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

STDMETHODIMP ShowDialog(HWND hWndParent);

Пока что я обхожу эту проблему, передавая OLE_HANDLE и затем разыгрывая его, но это похоже на комок:

STDMETHODIMP ShowDialog(OLE_HANDLE hWndParent);

Ответы [ 2 ]

2 голосов
/ 01 мая 2009

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

1 голос
/ 01 мая 2009

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

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

...