Windows任务计划程序:IAction.QueryInterface()返回一个我找不到定义的错误

时间:2011-01-13 00:47:37

标签: c++ winapi com scheduled-tasks

我正在尝试使用C ++ win32安排任务(在特定时间打开.exe)。但是在某个特定点上我得到了一个错误,我已经搜索过&搜索尝试&找到这个错误的定义,但我找不到它?

您知道此错误的含义:十六进制: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;
}

输出为:IExecAction的QueryInterface调用失败:80004003 80004003 2147500035

1 个答案:

答案 0 :(得分:2)

0x80004003是一个“无效指针”错误,a.k.a。E_POINTER

我假设execAction的声明是这样的:

IExecAction* execAction = NULL;

但是,QueryInterface需要一个指向接口指针的指针。换句话说,您传递了一个存储位置,在该存储位置放置IUnknown* ...或者,在此特定情况下,IExecAction*

因此,您需要传递execAction地址,以便QueryInterface可以返回指向您的接口指针。如:

hr = action -> QueryInterface( IID_IExecAction, (void**) &execAction );

我认为这是正在发生的事情,因为将指针值初始化为NULL是一种常见的编码实践,并且QueryInterface is documented在第二个参数为NULL时返回E_POINTER。如果没有,请使用execAction声明更新您的问题。