Czy istnieje sposób, aby uzyskać reprezentację łańcuchową wartości HRESULT za pomocą win API?
Czy istnieje funkcja w win API, która może być użyta do wyodrębnienia reprezentacji łańcuchowej wartości HRESULT?
Problem polega na tym, że nie wszystkie zwracane wartości są udokumentowane w MSDN, na przykład ExecuteInDefaultAppDomain() funkcja nie zwraca "0x80070002 - system nie może znaleźć określonego pliku.", jednak tak! Dlatego zastanawiałem się, czy istnieje funkcja, która ma być używana w powszechnym przypadku.
3 answers
Możesz użyć _com_error :
_com_error err(hr);
LPCTSTR errMsg = err.ErrorMessage();
Jeśli nie chcesz używać _com_error
z jakiegokolwiek powodu, nadal możesz spojrzeć na jego źródło i zobaczyć, jak to się robi.
Nie zapomnij dołączyć nagłówka comdef.h
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-17 00:00:32
Windows API to FormatMessage . Oto link, który wyjaśnia, jak to zrobić: Jak uzyskać opisy komunikatów o błędach za pomocą FormatMessage API .
Dla wiadomości Win32 (wiadomości z HRESULT, który zaczyna się od 0X8007, czyli FACILITY_WIN32), musisz usunąć słowo hi order. Na przykład w 0x80070002 musisz wywołać FormatMessage z 0x0002.
Jednak nie zawsze działa dla każdego rodzaju wiadomości. I dla niektórych konkretnych wiadomości (specyficzne dla technologii, dostawcy itp.), trzeba załadować odpowiednią DLL zasobów, co nie zawsze jest łatwym zadaniem, ponieważ trzeba znaleźć ten DLL.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-12 07:27:37
Oto przykład użycia FormatMessage ()
LPTSTR SRUTIL_WinErrorMsg(int nErrorCode, LPTSTR pStr, WORD wLength )
{
try
{
LPTSTR szBuffer = pStr;
int nBufferSize = wLength;
//
// prime buffer with error code
//
wsprintf( szBuffer, _T("Error code %u"), nErrorCode);
//
// if we have a message, replace default with msg.
//
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
NULL, nErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) szBuffer,
nBufferSize,
NULL );
}
catch(...)
{
}
return pStr;
} // End of SRUTIL_WinErrorMsg()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-26 15:27:27