编写自定义组件,及其事件调用,相关代码:
1。事件类型声明:
  TReceiveDataEvent = Procedure(UsbCard, MachNo: byte;
                                BuffLeng, FuncCode: integer;
                                DataBuffer: array of char;
                                var handle:boolean ) of object;
2。组件声明:
  TWinComDevice = class(TComponent)  //通讯设备类
   private
     fOnReceiveData: TReceiveDataEvent;
     ...
   public
     property   OnReceiveData :TReceiveDataEvent read fOnReceiveData write fOnReceiveData;
     ...
   end;
3.组件事件触发:
     ...     
     if Assigned(fOnReceiveData) then  //总是为真
        fOnReceiveData(iCardid,iMachNo,iLength,iFuncCode,DataBuffer,bolHandle); //发生地址访问错误
     ...
4。组件事件
  MyComDevice.fOnReceiveData := ReceiveData;//ReceiveData为已定义的事件处理过程。问题:
  在调试过程中,用代码创建该组件类对象,并为其编写事件响应过程,提示出错,请高手指教。

解决方案 »

  1.   

    published和public在访问权限上并没有不同阿
      

  2.   

    在构造函数中必须将fOnReceiveData:=nil;
    否则,在fOnReceiveData未赋值前,fOnReceiveData值不确定,
    而Assigned(fOnReceiveData) 可能为真
      

  3.   

    经过调试发现,根本原因不在这里,是在
    if Assigned(fOnReceiveData) then  
    之前有个函数,其中调用dll,把该函数封了后,工作全部正常.
    可是该函数在调用后正常返回,并且返回值正确。 :(