Cryptic HRESULT错误

时间:2013-02-11 12:05:57

标签: c++ windows directx hresult

以下EndDraw()函数返回HRESULT错误代码: http://msdn.microsoft.com/en-us/library/windows/desktop/dd371924%28v=vs.85%29.aspx

文档指定:

  

如果方法成功,则返回S_OK。否则,它将返回HRESULT错误代码,并将tag1和tag2设置为发生错误时处于活动状态的标记。

     

...然后返回一个表示操作成功的HRESULT ...

我得到的回复值为-2003238911 (0x88990001),但未显示在Microsoft的“常见HRESULT值”页面上: http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137%28v=vs.85%29.aspx

我还在WinError.h中搜索了错误代码,但也找不到它。如果它返回此代码,必须有办法找出它的含义。

如何解释此错误代码以找出问题所在?

3 个答案:

答案 0 :(得分:3)

您使用Google,该十六进制代码的最高结果是:

D2DERR_WRONG_STATE
0x88990001
The object was not in the correct state to process the method.

http://msdn.microsoft.com/en-us/library/windows/desktop/dd370979(v=vs.85).aspx

我不知道有关图形编程或Windows编程的第一件事,但我认为这可以回答您的问题,并结合文档说明标记值将返回给您,指出错误发生的位置。

答案 1 :(得分:0)

最后但并非最不重要..

我得到了同样的错误,直到我意识到我没有先调用ID2D1HwndRenderTarget :: BeginDraw()才能为绘制调用准备渲染目标。

答案 2 :(得分:-1)

(我刚刚创建了一个帐户来对Loul G.的答案进行投票,但我还没有投票权......)

我有同样的问题......

当不按顺序调用BeginDraw()和EndDraw()时,你可以获得HRESULT:0X88990001

追溯回看它们被调用的顺序。

另外,为了帮助防止这种情况,您可以围绕BeginDraw(),EndDraw()调用,如:

bool beginCalled;
int beginCount;//for debugging
int endCount;//for debugging
//initialize variables somewhere...

void begin(){
   rendTarget>BeginDraw();
   beginCalled = true;
   beginCount++;
}

void end(){
   if(beginCalled){
      rendTarget->EndDraw();
      beginCalled = false;
   }
   endCount++;

} 

//print counts as necessary for debugging