我正在尝试使用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
答案 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
声明更新您的问题。