Delphi RegisterEventSource返回997 I/O挂起
调用:RegisterEventSource时,如何处理错误997(io挂起) 谢谢你的帮助Delphi RegisterEventSource返回997 I/O挂起,delphi,event-log,Delphi,Event Log,调用:RegisterEventSource时,如何处理错误997(io挂起) 谢谢你的帮助 procedure TForm1.Button111Click(Sender: TObject); var StringToAdd: String; hEventLog: THandle; p: PChar; EventID: Word; CategoryID: Word; wynik: Boolean; errnumber: cardinal; begin hEvent
procedure TForm1.Button111Click(Sender: TObject);
var
StringToAdd: String;
hEventLog: THandle;
p: PChar;
EventID: Word;
CategoryID: Word;
wynik: Boolean;
errnumber: cardinal;
begin
hEventLog := RegisterEventSource(nil, PChar('app'));
errnumber := 0;
errnumber := GetLastError(); //<==997
showmessage (IntToStr(errnumber));
if hEventLog > 0 then
begin
p := PChar('Test');
wynik :=
ReportEvent(
hEventLog,
EVENTLOG_INFORMATION_TYPE, // Event Type
22, // Event Category ID
500, // Event ID
nil, // User SID (optional)
1, // Number of strings
0, // Size of Binary Data
@p, // String to be merged with Text in Ressource DLL
nil // Address of Binary Data
);
errnumber := GetLastError(); //<==997
showmessage (IntToStr(errnumber));
DeRegisterEventSource(hEventLog);
end;
end;
procedure TForm1.按钮111click(发送方:TObject);
变量
StringToAdd:字符串;
赫文特洛格:坦德尔;
p:PChar;
EventID:Word;
类别:单词;
wynik:布尔型;
号码:红衣主教;
开始
hEventLog:=RegisterEventSource(无,PChar('app');
错误编号:=0;
errnumber:=GetLastError();//0那么
开始
p:=PChar(“测试”);
怀尼克:=
报告事件(
赫文特洛格,
EVENTLOG\u信息\u类型,//事件类型
22,//事件类别ID
500,//事件ID
nil,//用户SID(可选)
1,//字符串数
0,//二进制数据的大小
@p、 //要与Ressource DLL中的文本合并的字符串
nil//二进制数据的地址
);
errnumber:=GetLastError()// 在调用GetLastError
之前,您没有测试hEventLog
是否为NULL
。如果API调用失败,您应该只调用GetLastError
,如文档中所述
我猜想,RegisterEventSource
实际上成功了,并且您从程序执行早期发生的另一个API调用失败中获得了错误代码。@TOndrej添加了代码。如果RegisterEventSource
返回0,您应该只调用GetLastError
。“app”是注册表中的有效子项吗?是的,你说得对,谢谢。句柄返回且大于0,因此函数成功。顺便问一下,您知道是否有一个api可以从用户日志中删除源代码吗?我总是将测试编写为hEventLog0
,而不是>0
,因为文档说明如果失败,它将返回0。=
的否定是
。我不知道你删除源代码是什么意思。我不太熟悉事件日志API。听起来你可能还有另一个问题。别忘了接受这个答案。