Следующая функция 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
но там тоже не могу найти. Если он возвращает этот код, должен быть способ узнать, что это значит.
Как мне интерпретировать этот код ошибки, чтобы узнать, что пошло не так?
Вы используете 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, но я думаю, что это отвечает на ваш вопрос в сочетании с документами о том, что значения тегов будут возвращены вам, ссылаясь на точку, где произошла ошибка.
Последний, но тем не менее важный..
Я получил ту же ошибку, пока не понял, что сначала не вызывал ID2D1HwndRenderTarget :: BeginDraw (), чтобы подготовить цель рендеринга для вызовов отрисовки.
(Я только что создал аккаунт, чтобы проголосовать за ответ Лоул Г., но у меня пока нет разрешения голосовать …)
У меня была такая же проблема …
Когда 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