Delphi RegisterEventSource返回997 I/O挂起

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

调用:RegisterEventSource时,如何处理错误997(io挂起)

谢谢你的帮助

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。听起来你可能还有另一个问题。别忘了接受这个答案。