当参数传递给时,我遇到问题
FormatMessage
太长了。
void testMessage(UINT id, ...)
{
va_list argList;
va_start(argList, id);
LPTSTR buff = NULL;
const char* str = "The following value is invalid: %1";
DWORD success = FormatMessage(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ALLOCATE_BUFFER,
str, 0, 0, (LPSTR) &buff, 0, &argList);
if(0 == success)
{
DWORD err = GetLastError();
//...
}
va_end(argList);
//...
}
int main(int argc, char** argv)
{
const char* arg = NULL;
// ...
// Initialize arg to some big string about 33,000 bytes long.
// ...
test(0, arg);
}
我得到的错误是
ERROR_MORE_DATA
arg
对于大约32000字节,这个问题不会发生,但是不清楚这个限制是与传入的参数大小有关,还是与生成的字符串的总大小有关。这个
MSDN page
格式化消息
说到
lpBuffer
参数“此缓冲区不能大于64K字节。”