2013-10-22 33 views
1

我有一些代碼調用_com_object的ErroerMessage()函數在try,catch中返回錯誤代碼。Windows ErrorMessage返回代碼而不是消息

catch(const _com_error& error) 
{ 
    myError = _T("Failed, Reason:")+error.ErrorMessage(); 
} 

而不是獲取實際的Windows字符串解釋錯誤我得到錯誤代碼返回。在這種情況下0xC00E001E

我已經包含mqoa.dll允許訪問Windows DLL的MSMQ

伊夫使用斷點,並通過加強與發現返回的wCode始終爲0

任何幫助將不勝感激。

由於

+0

什麼是'myError'的類型?它看起來像添加了兩個指針而不是連接字符串。 –

+0

CString&csError是myError,我收到錯誤信息說失敗的原因:0xC00E001E和它的錯誤代碼,但我認爲可能有一個問題得到代碼的定義 – PowPowPowell

回答

1

_T("Failed, Reason:")是一個const指針TCHARErrorMessage()也返回一個指向TCHAR的常量指針。 +運算符最終執行指針算術而不是連接字符串。

如果myErrorCString,你可以使用它的+=操作:

myError = _T("Failed, Reason: "); 
myError += error.ErrorMessage(); 

或其Format()方法:

myError.Format(_T("Failed, Reason: %s"), error.ErrorMessage()); 
+0

試圖使用這兩種方法,我不斷得到同樣的問題,我得到的錯誤代碼,但不是字符串版本。 失敗原因:0xC00E001E是輸出 – PowPowPowell

+0

@user,它*可能是因爲FormatMessage()不知道如何格式化MSMQ錯誤。它是否像預期的那樣使用標準的COM錯誤(例如'E_FAIL')? –

+0

我認爲它確實如此,因爲它返回未指定的錯誤 – PowPowPowell

相關問題