2011-12-17 4 views
0

이 문제는 거의 비슷합니다. FormatMessage Fails with error code 317EventLog를 읽으려고 시도하는 중에 FormatMessage에서 오류 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 Library] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms679351.aspx#format_message_from_system)에서 확인할 수 있습니다. 이 경우 "함수는 _lpSource_"에 지정된 모듈에서 메시지를 찾을 수없는 경우 시스템 메시지 테이블을 검색합니다. –

+0

나는 고쳐졌다. 그러나 메시지가 어디에서 발견 될지 모르는 것은 이상한 일입니다. 당신은 알고 있어야. 일반적으로 이벤트 로그의 메시지는 시스템에서 가져 오지 않습니다. 이 이벤트는 이벤트별로 제공되며 이벤트의 메시지 공급자에서 제공됩니다. –