当程序遇到Win32错误时,我想提供有意义的错误消息。我拨打GetLastError
,然后拨打FormatMessage
。但是一些错误消息包含占位符。例如,ERROR_BAD_EXE_FORMAT
的文字为:
%1不是有效的Win32应用程序。
据推测,%1意味着被无效的模块名称所取代。我该如何影响更换?
请注意,我理想地喜欢一般解决方案,因为我注意到占位符存在许多错误。我可以在文档中看到以下消息:
答案 0 :(得分:2)
我认为Raymond Chen在他撰写的blog评论中有效地回答了这个问题:
系统错误消息包含
%1
插入,您必须根据具体情况“知道”,这也让我感到烦恼。
答案 1 :(得分:1)
ERROR_BAD_EXE_FORMAT
包含插入%1。您可以使用FormatMessage()
的最后一个参数替换它。这段代码有点样本。
LPWSTR pMessage = L"%1";
DWORD_PTR pArgs[] = {(DWORD_PTR)L"My_Test_App.exe" };
TCHAR buffer[1024];
DWORD dwError = ERROR_BAD_EXE_FORMAT;
DWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY;
DWORD dwResult = FormatMessage(dwFlags, pMessage, dwError, 0, buffer, 1024, (va_list*)pArgs);
if (dwResult)
{
//now, 'buffer' contains below message.
//
//My_Test_App.exe is not a valid Win32 application.
//
}
我知道一些系统错误代码有插入。我认为我们无法为所有这些提供相关论据。所以,如果我是你,我想只使用系统错误代码,而不是FormatMessage()
。或者,仅支持一些频繁的系统错误代码支持参数列表和FormatMessage()
。