想在DLL中引入控件的事件,比如TTimer的OnTimer事件在DLL中触发,但是不知道如何写这个方法,
把Procedure OnTimer(Sender: TObject);这个过程赋值给Timer的OnTimer属性显然是不行的,因为事件方法中有一个隐含的Self参数,而在dll中申明的方法不是类的成员也就不具备Self参数,所以赋值不成功。
那要如何申明这个过程呢?依稀记得以前有个大侠写过这种方法,好像是这个样子的:procedure OnTimer(Sender: TObject) of calss;
但是上面的那个方法编译通不过,显然有误。
在此特向大侠们请教。

解决方案 »

  1.   

    簡單點的, 引入一個form就可
      

  2.   

    <<delphi 深度歷險>> 說的比較詳細
      

  3.   

    难道遇见aiirii兄,在下甚感欣慰!
    可惜我没有《delphi 深度历险》这本书,不过这本书的知名度早已如雷贯耳。在下倒是有《delphi 深度探索》一书。
      

  4.   

    引入一个Form后,dll增加了700多k的数据沉余,感觉很不爽。
      

  5.   

    Timer是在DLL中吗?//在dll中定义个对外函数
    uses Classes  ...
    procedure SetOnTimeEvent(Aproc:TNotifyEvent);stdcall;
    ...
    ...
    procedure SetOnTimeEvent(Aproc:TNotifyEvent);
    begin
      if Assigned(Aproc) then
        Timer.OnTimer := Aproc;
    end;
    //--------------------------------------------
    在调用程序中
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      public
        procedure ProcOnTimeEvent(Sender:TObject);
      end;
    ...
    ...
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      SetOnTimeEvent(ProcOnTimeEvent);//将ProcOnTimeEvent赋给DLL中Timer的OnTimer
    end;procedure TForm1.ProcOnTimeEvent(Sender: TObject);
    begin
     //OnTimer事件中要执行的动作
    end;
      

  6.   

    to firef兄:OnTimer要在Dll中触发哦,不是引出去。
      

  7.   

    亲爱的朋友:
      我给两个建议:
      1.SetTimer();把DLL种的一个OnTimer过程指针传进去!
      2.做一个回调函数,在调用段也是把函数基址传进去
      

  8.   

    谢谢delphi_xizhousheng兄:Timer还可以用SetTimer之类的API函数搞定,那其他的VCL组件的事件怎么办,该不会都用API函数吧,偶的DLL里还有WinSocket以及其他的VCL组件哦!
      

  9.   

    既然OnTimer就是要赋给个对象方法,就在Dll中定义个类,也没什么不行啊TMyObject = class(TComponent)
    protected
      Timer:TTimer;
      procedure DoOnTime(Sender:TObject);//将此赋给Timer.OnTimer
    public
      constructor Create(AOwner: TComponent);override;
      destructor Destroy;
      ...
      ...
    end;