我在DLL中动态创建了一个按钮,并给把一个在DLL中定义的过程赋给了它的单击事件,简单代码如下:  
为什么在单击按钮时报内存错呢???单调后发现sender的值为nil,如何使sender有值呢??请看位兄弟看清题后再回答,不要贴一些在form下动态创建控件加事件的代码,我问的主要是在动态链接库中如何处理!!!谢谢!!!!!  
library  DCC;  
.  
 
procedure  BtnClick(sender:Tobject);  
begin  
   showmessage((sender  sa  TButton).name);//执行这一句报内存错,为什么得不到button1呢???  
end;  
.  
.  
 
//========================下面是自动创建按钮,并加载事件  
var  
   MyMet  :  TMetmod;  
   ..  
..  
Begin  
 .  
   .  
 MyButton.Name='Button1';  
   MyMet.Code  :=  @BtnClick;  
   MyButton.OnClick  :=  TNotifyEvent(MyMet);  
   ..  
End;  

解决方案 »

  1.   

    我想传递这类函数指针最好用一个对象来完成,
    例如:
      TMyButton=class
      public
        { Public declarations }
        procedure ButtonClick(Sender: TObject);
      end;
    var
      Form1: TForm1;
      MyButton:TMyButton;procedure TMyButton.ButtonClick(Sender: TObject);
    begin
      ShowMessage(Sender.ClassName);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var b:TButton;
    begin
      b:=TButton.Create(self);
      b.OnClick:=MyButton.ButtonClick;
      b.Parent:=self;
      b.Name:='aaaaaabbbbb';
    end;
      

  2.   

    longchaohui(阿龙) :你的代码好像还是不行,但还是谢谢你!!!我说的是在DLL中,或者是单独的一个.pas文件中,在没有form的情况下。
      

  3.   

    楼主,
    button肯定是需要附属于窗口的,
    不然它显示在什么地方呀,
    在说我的代码在dll中一样可以的,
    就是不理解你的没有form的情况是什么意思?
      

  4.   

    longchaohui(阿龙) :我是说我在form中调用DLL,我把form已作为参数传到DLL中了,可是在IButton.Onclick:=MyButton.ButtonClick;这句话时报错呀???
      

  5.   

    longchaohui(阿龙):不好意思你的代码确实没有问题,非常感谢呀!!!!我忘记定义了MyButton:TMyButton; 真是sorry呀!!!!!