2011-12-17 105 views
0

我遇到過與此類似的問題。 FormatMessage Fails with error code 317FormatMessage在嘗試讀取事件日誌時獲取錯誤317

不同之處在於它被認爲是由"FORMAT_MESSAGE_FROM_SYSTEM"引起的回答,但是當我將其刪除時,它會再次發生。

我想在Windows Server 2003中從EventLog中讀取。但是當我嘗試使用FormatMessage函數時,我得到了317錯誤。

有趣的是,相同的代碼適用於Windows Server 2008.我該如何解決這個問題,或者我可以使用什麼來代替FormatMessage

我的代碼:

FormatMessage(FORMAT_MESSAGE_FROM_HMODULE | 
     FORMAT_MESSAGE_FROM_SYSTEM | 
     FORMAT_MESSAGE_ALLOCATE_BUFFER, 
     g_hResources, // handles DLL containing message table 
     MessageId, 
     0, // Default language 
     (LPWSTR) &pMessage, 
     0, 
     (va_list*)pArgs) 

你的好日子..

回答

2

錯誤317 "The system cannot find message text for message number 0x%1 in the message file for %2."。這意味着MessageId不是系統已知的錯誤編號。

您正在合併FORMAT_MESSAGE_FROM_HMODULEFORMAT_MESSAGE_FROM_SYSTEM,這是沒有意義的。你想從哪裏得到消息?你想從g_hResources或從系統錯誤消息表中得到它嗎?從評論,這聽起來像你想從g_hResources得到它,在這種情況下,你應該刪除FORMAT_MESSAGE_FROM_SYSTEM。如果仍然出現錯誤317,則表示您通過的消息號不存在於g_hResources中。

+1

明確使用「FORMAT_MESSAGE_FROM_HMODULE」和「FORMAT_MESSAGE_FROM_SYSTEM」[在MSDN庫中記錄](http://msdn.microsoft.com/en-us/library/windows/desktop/ms679351.aspx#format_message_from_system):in這種情況「如果在由_lpSource_指定的模塊中未找到消息,則該函數搜索系統消息表」。 – 2011-12-18 18:08:14

+0

我站好了。但奇怪的是,你不知道消息將被發現在哪裏。你應該知道。無論如何,事件日誌中的消息通常不會來自系統。它們是事件特定的,來自事件的消息提供者。 – 2011-12-18 18:38:40