2014-11-27 2 views
-2

Привет У меня есть проблема со следующим кодом:Ошибка с PrivateMessages в IdIRC

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 .exe поднял класс exeption # C00000005 с нарушением права доступа на 0x00404673: прочитайте адрес 0x03cf4e58

Что я делаю неправильно?

ответ

1

TIdIRCPrivMessageEvent - это «процедура объекта», которая неявно ссылается на объект. Вы добавили параметр Self для этого, но вы опустили параметр TIdContext, который также является частью мероприятия:

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

ваш код дает мне сообщение об ошибке: [DCC Error] test.dpr (20): E2029 ';', ')' или '=' ожидается, но ':' found – adsdsa

+0

Измените оскорбительные ':' на ';'. –

Смежные вопросы