İşte bir hata mesajı için sistemden geri almanın uygun yolu HRESULT
(bu durumda hresult olarak adlandırılır veya yerine koyabilirsiniz GetLastError()
):
LPTSTR errorText = NULL;
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM
|FORMAT_MESSAGE_ALLOCATE_BUFFER
|FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hresult,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&errorText,
0,
NULL);
if ( NULL != errorText )
{
LocalFree(errorText);
errorText = NULL;
}
Bununla David Hanak'ın cevabı arasındaki temel fark FORMAT_MESSAGE_IGNORE_INSERTS
bayrak kullanımıdır . MSDN, eklemelerin nasıl kullanılması gerektiği konusunda biraz belirsizdir, ancak Raymond Chen , sistemin hangi eklemeleri beklediğini bilmenin hiçbir yolu olmadığından, bir sistem mesajını alırken bunları asla kullanmaman gerektiğini belirtiyor .
FWIW, Visual C ++ kullanıyorsanız, _com_error
sınıfı kullanarak hayatınızı biraz daha kolaylaştırabilirsiniz :
{
_com_error error(hresult);
LPCTSTR errorText = error.ErrorMessage();
}
Bildiğim kadarıyla MFC veya ATL'nin parçası değil.