In base a this, non è possibile convertire un codice di errore HRESULT in un codice di errore Win32. Pertanto (almeno la mia comprensione), il mio uso di FormatMessage al fine di generare messaggi di errore (vale a direCome posso (c'è un modo per) convertire un HRESULT in un messaggio di errore specifico del sistema?
std::wstring Exception::GetWideMessage() const
{
using std::tr1::shared_ptr;
shared_ptr<void> buff;
LPWSTR buffPtr;
DWORD bufferLength = FormatMessageW(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetErrorCode(),
0,
reinterpret_cast<LPWSTR>(&buffPtr),
0,
NULL);
buff.reset(buffPtr, LocalFreeHelper());
return std::wstring(buffPtr, bufferLength);
}
) non funziona per HRESULT.
Come si generano questi tipi di stringhe di errore specifiche del sistema per HRESULT?
* sempre * utilizzare IErrorInfo di lasciare la fornitura server COM il messaggio di errore. Solo fallback se non lo supporta. La classe _com_error potrebbe essere utile. –