在cap_ip单元中
````
TOnCap = procedure(ip,proto,sourceIP,destIP,SourcePort,DestPort: string;
                       header:pchar;header_size:integer;data:pchar;data_size:integer) of object;...
property    OnCap    : TOnCap
在cap_main中
interface
uses
``````cap_ip
...
cap_ip1:=Tcap_ip.Create(self);
cap_ip1.OnCap:=cap_ip1Cap;      //和CAP_IP中的ONCAP是什么关系????
 procedure TForm1.cap_ip1Cap(ip, proto, sourceIP, destIP, SourcePort,
  DestPort: String; header: PChar; header_size: Integer; data: PChar;
  data_size: Integer);
 begin
````
end;
在CAP_MAIN中的TForm1.cap_ip1Cap和CAP_IP中的ONCAP是什么关系了。不明白,请指点一下

解决方案 »

  1.   

    代码不全。
    如果你cap_ip文件中property    OnCap    : TOnCap属于Tcap_ip定义的部分;
    并且cap_ip1:=Tcap_ip.Create(self);中Tcap_ip指的是cap_ip文件中的Tcap_ip;
    并且cap_ip1.OnCap:=cap_ip1Cap这段代码属于TForm1,并且cap_ip1Cap指的就是TForm1.cap_ip1Cap;
    那么你的问题中的两者,前者是实体,后者是指针了。
      

  2.   

    @_?
    cap_ip是重写的TCOMPONENT部件
    type
    //...
    TOnCap = procedure(ip,proto,sourceIP,destIP,SourcePort,DestPort: string;
              header:pchar;header_size:integer;data:pchar;data_size:integer) of object;
        //为什么要加上OF OBJECT
    tcap_ip=class(tcompnent)
    private
    //.........
    FOnCap      :TOnCap;     //捕捉数据的事件
    //...
    published
    property    OnCap    : TOnCap     read  FOnCap write FOnCap;
    //...
    而后在CAP_MAIN中引用
    USES CAP_IP...
    var cap_ip1:Tcap_ip;
    在TForm1.FormCreate中
    cap_ip1:=Tcap_ip.Create(self);
    cap_ip1.OnCap:=cap_ip1Cap;//cap_ip1Cap是在CAP_MAIN中定义的过程为什么ONCAP=cap_ip1Cap
    //...
    ------------------------------------------------------procedure TForm1.cap_ip1Cap(ip, proto, sourceIP, destIP, SourcePort,
     DestPort: String; header: PChar; header_size: Integer; data: PChar;
     data_size: Integer);
    //.......