0
當傳遞給FormatMessage
的參數太長時,我遇到問題。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
(234)。當我將arg
的大小減小到大約32,000字節時,問題不會發生,但是不清楚限制是與傳入的參數的大小還是生成的字符串的總大小有關。 FormatMessage
上的MSDN page表示關於lpBuffer
參數,「此緩衝區不能大於64K字節」。
我可以通過做更多的錯誤檢查並對我傳遞給這個函數的參數的大小加上一些理智的限制來輕鬆解決這個問題,但是對於我和其他人的未來參考,知道什麼是真正的限制是。
啊,我想我打電話給FormatMessageA,因爲我沒有定義UNICODE宏。這聽起來像是一個解釋。謝謝! – Owen 2009-11-26 17:51:31