0x80004003 - ошибка «неверный указатель», a.k.a. E_POINTER
.
Я предполагаю, что объявление execAction
выглядит примерно так:
IExecAction* execAction = NULL;
Но QueryInterface ожидает указатель на указатель на интерфейс. Другими словами, вы передаете место хранения, в которое нужно поместить IUnknown*
... или, в данном конкретном случае, IExecAction*
.
Итак, вам нужно передать адрес из execAction
, чтобы QueryInterface мог вернуть вам указатель интерфейса. Как в:
hr = action -> QueryInterface( IID_IExecAction, (void**) &execAction );
Я предполагаю, что это то, что происходит, так как инициализация значений указателя в NULL является обычной практикой кодирования, и QueryInterface задокументирован для возврата E_POINTER
, когда второй аргумент равен NULL. Если нет, пожалуйста, обновите ваш вопрос объявлением execAction
.