Winapi 在哪里可以找到ReportEvent函数用法的好例子?
与大多数“遗留”MSDN页面一样,的页面信息太少,我无法理解。我尝试过搜索,但找不到一个好的、干净的、简单的函数用法示例。有人能推荐一个吗?我记得正确设置是一件痛苦的事情-您需要使用向应用程序添加消息-如果跳过此操作,您将不会看到有用的消息,只会看到错误代码。请看一个例子我最终使用了以下方法:Winapi 在哪里可以找到ReportEvent函数用法的好例子?,winapi,advapi32,Winapi,Advapi32,与大多数“遗留”MSDN页面一样,的页面信息太少,我无法理解。我尝试过搜索,但找不到一个好的、干净的、简单的函数用法示例。有人能推荐一个吗?我记得正确设置是一件痛苦的事情-您需要使用向应用程序添加消息-如果跳过此操作,您将不会看到有用的消息,只会看到错误代码。请看一个例子我最终使用了以下方法: HANDLE eventLog; WORD type; const char* msg; // ... snip ... ReportEvent(eventLog, type, 0, 1, NULL,
HANDLE eventLog;
WORD type;
const char* msg;
// ... snip ...
ReportEvent(eventLog, type, 0, 1, NULL, 1, 0, &LPCTSTR(msg), NULL);
似乎工作得很好。这似乎是一个非常古老的线程,在这里登陆是为了寻找一个报告事件的好例子。。。但我发现你还没有收到任何回复…而且可能已经找到了解决方案 您看到“未找到事件Id”的原因是EventViewer无法加载/查找要为事件Id显示的文本资源。很抱歉,如果最后一行听起来很怪。。但这就是我对EventLog的理解: -事件日志记录有两个方面
HKLM\CurrentControlSet\System\Services\EventLog\Application
一个catch:如果你想知道.NET是怎么做的……它只是提供了一个默认的EnvivMeLogEFEFLE,叫做EnviLogLogMase.DLL(在
此解决方案的问题在于,它会记录混乱的日志(参见Windows Vista上的“找不到源XYZ.exe中事件ID 1的说明”)。如果不需要特定于语言/区域性的消息,则可以生成一个消息DLL,该DLL只包含一个映射到资源“%1”的ID(例如,通用_消息)。然后为应用程序注册此DLL,只需将要在事件查看器中显示的字符串作为此消息的第一个参数传递。此方法在中进行了描述,但请注意在调用“mc”使示例工作时使用“-c”标志!
//
// FUNCTION: CServiceBase::WriteEventLogEntry(PWSTR, WORD)
//
// PURPOSE: Log a message to the Application event log.
//
// PARAMETERS:
// * pszMessage - string message to be logged.
// * wType - the type of event to be logged. The parameter can be one of
// the following values.
//
// EVENTLOG_SUCCESS
// EVENTLOG_AUDIT_FAILURE
// EVENTLOG_AUDIT_SUCCESS
// EVENTLOG_ERROR_TYPE
// EVENTLOG_INFORMATION_TYPE
// EVENTLOG_WARNING_TYPE
//
void CServiceBase::WriteEventLogEntry(PWSTR pszMessage, WORD wType)
{
HANDLE hEventSource = NULL;
LPCWSTR lpszStrings[2] = { NULL, NULL };
hEventSource = RegisterEventSource(NULL, m_name);
if (hEventSource)
{
lpszStrings[0] = m_name;
lpszStrings[1] = pszMessage;
ReportEvent(hEventSource, // Event log handle
wType, // Event type
0, // Event category
0, // Event identifier
NULL, // No security identifier
2, // Size of lpszStrings array
0, // No binary data
lpszStrings, // Array of strings
NULL // No binary data
);
DeregisterEventSource(hEventSource);
}
}