2012-11-24 12 views
7

Tôi muốn truy xuất chuỗi lỗi cho DirectX 9, nhưng tôi có thể tìm thấy trên web đang sử dụng FormatMessage() và _com_error.ErrorMessage(), cả hai đều không thành công.Làm cách nào tôi có thể truy xuất chuỗi lỗi cho DirectX 9

hr = g_pd3dDevice->GetRenderTargetData(... 
... // the debugger tells me hr = 0x8876086c 
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 
    NULL, hr, 0, (LPTSTR)&lpBuf, 0, NULL)) 
// it returns 0 with lpBuf unallocated 

FormatMessage() thất bại và tôi sử dụng nó một lần nữa với GetLastError() để xem lý do tại sao FormatMessage() thất bại: "Hệ thống không thể tìm thấy nội dung tin nhắn cho số lượng tin nhắn 0x% 1 trong file nhắn cho% 2 . "

_com_error.ErrorMessage() nói với tôi "Lỗi không xác định 0x8876086c"

+0

BTW: có một cách phổ biến để có được chuỗi lỗi cho tất cả HRESULT? – LeOpArD

+0

Không thực sự, mã lỗi và tin nhắn được phân loại. Ví dụ, hệ thống con mạng có mã và tin nhắn riêng của nó, DX có riêng của nó, vv Vì vậy, bạn phải biết một loại hoạt động bạn đã thực hiện để có được một tin nhắn tương ứng với lỗi bạn đang nhận được. –

+0

Xem tệp tiêu đề d3d9.h để biết mã lỗi. Bạn sẽ tìm thấy một kết quả phù hợp với D3DERR_INVALIDCALL, chuỗi sẽ không cho bạn biết lý do bạn truyền các đối số không hợp lệ. Cũng không phải đoạn trích của bạn. –

Trả lời

15

Để nhận được thông báo lỗi DirectX, có hai chức năng - DXGetErrorString()DXGetErrorDescription(). Điều đó đang được nói, FormatMessage() sẽ không giúp bạn có được những gì bạn muốn. Dưới đây là một ví dụ nhỏ:

// You'll need this include file and library linked. 
#include <DxErr.h> 
#pragma comment(lib, "dxerr.lib") 

...

if (FAILED(hr)) { 
    fprintf(stderr, "Error: %s error description: %s\n", 
     DXGetErrorString(hr), DXGetErrorDescription(hr)); 
} 
+0

Nó hoạt động! Cảm ơn bạn. – LeOpArD

+0

dxerr không được dùng nữa. Hơn nữa theo liên kết dưới đây - "Thời gian chạy VS 2015 C không tương thích với DXERR.LIB gửi trong DirectX SDK kế thừa" https://blogs.msdn.microsoft.com/chuckw/2012/04/24/wheres- dxerr-lib / – kreuzerkrieg