2012-11-24 28 views
7

मैं DirectX 9 के लिए त्रुटि तार प्राप्त करना चाहते हैं के लिए त्रुटि तार कैसे प्राप्त कर सकते हैं, लेकिन मैं वेब FormatMessage() और _com_error.ErrorMessage(), जो दोनों के लिए मुझे असफल उपयोग कर रहा है पर पा सकते हैं।मैं 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() विफल रहता है और मैं इसे फिर से उपयोग करने GetLastError() के साथ देखने के लिए क्यों FormatMessage() विफल रहता है: "सिस्टम संदेश संख्या% 2 के लिए संदेश फ़ाइल में 0x% 1 के लिए संदेश पाठ नहीं मिल सकता है । " DXGetErrorString() और DXGetErrorDescription() -

_com_error.ErrorMessage() मुझे "अज्ञात त्रुटि 0x8876086c"

+0

Btw: वहाँ एक आम तरीका सभी HRESULT के लिए त्रुटि तार पाने के लिए है? – LeOpArD

+0

वास्तव में नहीं, त्रुटि कोड और संदेश वर्गीकृत हैं। उदाहरण के लिए, नेटवर्क सबसिस्टम का अपना कोड और संदेश हैं, DX तो तुम आपरेशन का एक प्रकार आप संदेश त्रुटि मिल रहा है करने के लिए इसी प्राप्त करने के लिए प्रदर्शन कर रहे थे पता होना चाहिए अपने स्वयं के, आदि है। –

+0

त्रुटि कोड के लिए d3d9.h शीर्षलेख फ़ाइल देखें। आप D3DERR_INVALIDCALL के साथ एक मैच मिल जाएगा, स्ट्रिंग में बताने के लिए तुम क्यों अमान्य तर्क पारित नहीं किया जा रहा है। न ही आपका स्निपेट करता है। –

उत्तर

15

DirectX त्रुटि संदेश प्राप्त करने के लिए कहता है, वहाँ दो कार्य कर रहे हैं। कहा जा रहा है कि, FormatMessage() आपको वह नहीं मिलेगा जो आप चाहते हैं। यहाँ एक छोटा सा उदाहरण है:

// 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

यह काम करता है! धन्यवाद। – LeOpArD

+0

dxerr बहिष्कृत है। इसके अलावा लिंक नीचे के अनुसार - "वी.एस. 2015 सी रनटाइम DXERR.LIB साथ संगत नहीं है कि विरासत DirectX SDK में जहाजों" https://blogs.msdn.microsoft.com/chuckw/2012/04/24/wheres- dxerr-lib / – kreuzerkrieg