Планировщик заданий Windows: IAction.QueryInterface () возвращает ошибку, не могу найти определение для - PullRequest
2 голосов
/ 13 января 2011

Я пытаюсь запланировать задачу (открыть .exe в определенное время), используя C ++ win32.Но в один конкретный момент я получаю сообщение об ошибке, я искал и искал, чтобы попытаться найти определение этой ошибки, но я не могу ее найти?

Знаете ли вы, что означает эта ошибка: Шестнадцатеричный:80004003 Десятичное число: 2147500035

Я не буду публиковать всю функцию, потому что она довольно длинная (если вам может не понадобиться ее для определения контекста ошибки?).

код, который я использую (который вызывает ошибку) является следующим:

//  QI for the executable task pointer.
hr = action -> QueryInterface( IID_IExecAction, (void**) execAction );
action -> Release();

if( FAILED(hr) )
{
    printf("QueryInterface call failed for IExecAction: %x %X %u \n", hr, hr, hr );
    rootFolder -> Release();
    task -> Release();
    CoUninitialize();
    return false;
}

Выходные данные: QueryInterface сбой для IExecAction: 80004003 80004003 2147500035

1 Ответ

2 голосов
/ 13 января 2011

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...