Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi IdIRC中的PrivateMessages出错_Delphi_Indy - Fatal编程技术网

Delphi IdIRC中的PrivateMessages出错

Delphi IdIRC中的PrivateMessages出错,delphi,indy,Delphi,Indy,您好,我对以下代码有问题: program test; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, idIRC, idContext, idGlobal; // procedure TForm1.IdIRC1PrivateMessage(ASender: TIdContext; const ANickname, // AHost, ATarget, AMessage: string); // procedure TForm

您好,我对以下代码有问题:

program test;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils, idIRC, idContext, idGlobal;


// procedure TForm1.IdIRC1PrivateMessage(ASender: TIdContext; const ANickname,
// AHost, ATarget, AMessage: string);

// procedure TForm1.IdIRC1Raw(ASender: TIdContext; AIn: Boolean;
// const AMessage: string);

procedure IrcPrivateMessage(ASelf: Pointer; const ANickname, AHost, ATarget,
  AMessage: string);
begin
  Writeln('[+] Message ' + ANickname + ' > ' + AMessage);
end;

procedure IrcRaw(ASelf: Pointer; ASender: TIdContext; AIn: Boolean;
  const AMessage: String);
begin
  Writeln(iif(AIn, '[Recv] ', '[Sent] ') + AMessage);
end;

var
  irc: TIdIRC;
  m1: TMethod;
  m2: TMethod;

begin
  try
    irc := TIdIRC.Create(nil);
    try
      irc.Host := 'localhost';
      irc.Port := 6667;
      irc.Nickname := 'tester';
      irc.Username := 'tester';

      m1.Code := @IrcRaw;
      m1.Data := irc;
      irc.OnRaw := TIdIRCRawEvent(m1);

      m2.Code := @IrcPrivateMessage;
      m2.Data := irc;
      irc.OnPrivateMessage := TIdIRCPrivMessageEvent(m2);

      try
        irc.Connect;
      except
        Writeln('Nay');
        Exit;
      end;

      Writeln('Yeah');

      irc.Join('#locos');

      while ('1' = '1') do
      begin
        //
      end;

    finally
      irc.Free;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.
问题是,当我收到私人消息时,ANickname条目会给我以下错误:

Project test.exe引发了exeption类#C00000005,消息为“0x00404673处的访问冲突:读取地址0x03cf4e58


我做错了什么?

TIDIRCPRIVEMessageEvent是一个“对象过程”,它隐式引用对象。您为此添加了一个
Self
参数,但忽略了也是事件一部分的
TIdContext
参数:

procedure IrcPrivateMessage(ASelf: Pointer; Sender: TIdContext; const ANickname, AHost, ATarget, AMessage: string);
begin
   ....
end;

您的代码给了我错误:[DCC error]test.dpr(20):E2029';',')”或者“=”预期但“:”发现将有问题的
更改为