2011-01-13 72 views
2

的定義我正在嘗試使用C++ win32計劃任務(在特定時間打開一個.exe)。但在一個具體點我收到錯誤,我搜索了&搜索嘗試&找到這個錯誤的定義,但我找不到它?Windows任務計劃程序:IAction.QueryInterface()返回錯誤我無法找到

你知道這是什麼錯誤意味着:十六進制: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

回答

2

0x80004003是一個「無效指針」錯誤,又名E_POINTER

我承擔execAction的聲明是這樣的:

IExecAction* execAction = NULL; 

但是,預期的QueryInterface一個指向的接口指針。換句話說,您通過一個存儲位置來放置IUnknown* ...或在此特定情況下爲IExecAction*

所以,你需要通過地址execAction這樣QueryInterface可以返回接口指針給你。如:

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

我想這是因爲初始化指針值NULL發生的事情是一種常見的編碼實踐,QueryInterface is documented返回E_POINTER當第二個參數爲NULL。如果沒有,請用execAction的聲明更新您的問題。

+0

如果您要展示如何將「hr」分解爲其組件,此答案將是完美的。 – 2011-01-13 01:52:46