使用EnentLog

 

使用EventLog并非很容易的事。

需要以下几个步骤:

 

  1. 创建MessageFile(以.mc为扩展名的文本文件);格式有严格的规定
    1. 基本格式:MessageId=xxx

SymbolicName=IDS_EVT_MYDEFINE

Language=English

mydefine event string goes here.if there's parameters use %1 %2...

.

//must use . to end one event message define.

 

MessageId=xxx//next block...

.

  1. 如果使用中文,在文件最初定义

LanguageNames=(Chinese=0x804:MSG00804)//0x804CodePageMSG00804为定义文件名称(mc输出的.bin文件)。然后替换基本格式中的Language字段,如下Language=Chinese

  1. 如果支持多种语言,则如下定义:

LanguageNames=(English=0x409:MSG00409)
LanguageNames=(Japanese=0x411:MSG00411)

MessageId=0x1
Severity=Error
Facility=Runtime
SymbolicName=MSG_BAD_COMMAND
Language=English

You have chosen an incorrect command.
Language=Japanese
正しくないコマンド選択がされました。

.

 

  1. 文件必须以一个空行结束,即在最后一个信息定义块的.后加回车换行。
  1. 使用mc编译此文件,如果你的项目使用UNICODE,如下:mc myevt.mc;否则必须加入命令选项:mc myevt.mc -A。将生成的三个文件myevt.rc myevt.h MSG00804.bin拷贝到项目目录下。
  2. 在项目的资源文件MyProj.rc中加入#include "myevt.rc",在项目头文件MyProj.h中加入#include "myevt.h"
  3. 在注册表中加入如下项:

HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/EventLog/Application

项:MyProj

键:EventMessageFile REG_EXPAND_SZ,值:D:/MyProj/MyProj.Exe (你的应用程序路径)

键:TypeSupported REG_DWORD,值1(你编译过的资源文件中的序号)

  1. 在项目文件中使用EventLog的地方如下调用:

HANDLE h;

h = RegisterEventSource(

NULL,

// uses local computer

TEXT("SamplApp")); // source name

if (h == NULL)

ErrorExit("Could not register the event source.");

if (!ReportEvent(

h, // event log handle

EVENTLOG_ERROR_TYPE, // event type

0, // category zero

IDS_EVT_MYDEFINE, // event identifier 这里是myevt.h中定义的事件ID

NULL, // no user security identifier

1, // one substitution string

0, // no data

szMsg, // pointer to string array

// 如果IDS_EVT_MYDEFINE中包含%1 2 3...将使用此数组填充

NULL)) // pointer to data

ErrorExit(TEXT("Could not report the event."));

DeregisterEventSource(h);

  1. 当然,仅仅进行第5步即可在EventLog中输出信息,但是,信息将如下显示:

事件 ID ( 0 )的描述(在资源( MyProj )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远端计算机显示消息。您可能可以使用 /AUXSOURCE= 标识来检索词描述;查看帮助和支持以了解详细信息。下列信息是事件的一部分: xxxxxx

这样看起来很不舒服,如果是商用软件,这是不可接受的。

 

  1. 另外,资源也可以在一个DLL中实现,更改注册表相应项EventMessageFile即可。

 

更多的关于使用MC的信息参见:

ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/tools/tools/about_message_text_files.htm

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值