Загадочные ошибки 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 но там тоже не могу найти. Если он возвращает этот код, должен быть способ узнать, что это значит.

Как мне интерпретировать этот код ошибки, чтобы узнать, что пошло не так?

0

Решение

Вы используете 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, но я думаю, что это отвечает на ваш вопрос в сочетании с документами о том, что значения тегов будут возвращены вам, ссылаясь на точку, где произошла ошибка.

3

Другие решения

Последний, но тем не менее важный..

Я получил ту же ошибку, пока не понял, что сначала не вызывал ID2D1HwndRenderTarget :: BeginDraw (), чтобы подготовить цель рендеринга для вызовов отрисовки.

0

(Я только что создал аккаунт, чтобы проголосовать за ответ Лоул Г., но у меня пока нет разрешения голосовать …)

У меня была такая же проблема …

Когда 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
-1
По вопросам рекламы [email protected]