DWORD WINAPI FormatMessage( _In_ DWORD dwFlags, _In_opt_ LPCVOID lpSource, _In_ DWORD dwMessageId, _In_ DWORD dwLanguageId, _Out_ LPTSTR lpBuffer, _In_ DWORD nSize, _In_opt_ va_list *Arguments );
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) //设置为本地默认语言 MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US) //设置为美语 MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED) //中文简体
这个参数第一次是用的时候感觉是尤其复杂。这个参数跟dwFlags,lpSource都有关系,所以才是有点复杂。参数类型是va_list*,首先如果参数不是一个va_list*的指针,那么就得在dwFlags中使用FORMAT_MESSAGE_ARGUMENT_ARRAY ,并且传递一个DWORD_PTR类型的数组作为参数。
%n!string!的用法:
其中n是1-99的整数,如果不加后面的!string!的话就直接表示第一个,第二个参数,以此类推。LPWSTR pMessage = L"%1!*.*s! %4 %5!*s!"; DWORD_PTR pArgs[] = { (DWORD_PTR)4, (DWORD_PTR)1, (DWORD_PTR)L"Bill", (DWORD_PTR)L"Bob", (DWORD_PTR)5, (DWORD_PTR)L"Bill" }; const DWORD size = 100+1; WCHAR buffer[size]; if (!FormatMessageW(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY, pMessage, 0, 0, buffer, size, (va_list*)pArgs)) { wprintf(L"Format message failed with 0x%x\n", GetLastError()); return; }
LPSTR buf; LONG x1 = RegCreateKey(HKEY_LOCAL_MACHINE,TEXT("sofware\\VC++MFC\\adminss"),&hKey); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL , x1, MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), (LPTSTR)&buf, 3, NULL); LocalFree(buf);
TCHAR buf[100] = {0}; LONG x1 = RegCreateKey(HKEY_LOCAL_MACHINE,TEXT("sofware\\VC++MFC\\adminss"),&hKey); FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL , x1, MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), (LPTSTR)buf, 100, NULL);
FormatMessage函数的用法,布布扣,bubuko.com
原文:http://blog.csdn.net/ddupd/article/details/38518959