窗体上有一个保存控件.是用于把数据导入Excel表中.编译成可执行文件,保存时正常.但是做成dll.保存时报地址错.其它的控件都正常.是什么原因?
library AllQuy; uses 
  ShareMem, Forms, SysUtils, Classes, 
  AllQuery in 'AllQuery.pas' {AllForm}; procedure ShowAllQuery();stdcall; 
var f:TAllForm; 
begin 
  f:=TAllForm.Create(nil); 
  try 
    f.ShowModal; 
  finally 
    f.Free; 
  end; 
end; {$R *.res} exports 
  ShowAllQuery; 
  
begin end. 
unit单元文件: 
....... 
procedure TAllForm.BitBtn5Click(Sender: TObject); 
var 
  ExpClass : TDBGridEhExportClass; 
  Ext, s :String; 
begin 
  s := Label1.Caption; 
  SaveDialog1.FileName := s + '.xls';   if SaveDialog1.Execute then 
  begin 
    DBGrid.Selection.SelectAll; 
    AllForm.ActiveControl := DBGrid; 
    case SaveDialog1.FilterIndex of 
      1: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end; 
      2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end; 
      3: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end; 
    else 
      ExpClass := nil; Ext := ''; 
    end; 
    if ExpClass <> nil then 
    begin 
      if UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3)) <> UpperCase(Ext) then 
        SaveDialog1.FileName := SaveDialog1.FileName + '.' + Ext; 
      SaveDBGridEhToExportFile(ExpClass,DBG,SaveDialog1.FileName, true); 
    end; 
  end; 
end; 
........... 以上为dll.下面是调用dll的部分代码 procedure TmainForm.Botton1(Sender: TObject); 
type 
  mypointer = procedure();stdcall; 
var 
  Handle : THandle; 
  frm_p : mypointer; 
  begin 
    Handle := loadlibrary('AllQuy.dll'); 
    if Handle > 32 then 
    begin 
      frm_p := GetProcAddress(Handle, 'ShowAllQuery'); 
      if @frm_p <> nil then 
        frm_p; 
    end; 
  Freelibrary(Handle); 
end;