将调用窗体的语句写成DLL中的一个函数来调用时出现内存错误,麻烦大家看看是什么问题?DLL中的函数:procedure OpenForm(frm:TForm);
begin
  try
    frm := TForm.Create(Application);
    frm.ShowModal;
  finally
    frm.Free;
  end;
end;主程序中的调用语句:
implementation
uses SelectTYPJ_frm;
procedure OpenForm(frm:TForm);stdcall;external 'pub.dll'procedure TfrmInputPJ.grdT0103KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin    OpenForm(frmSelectTYPJ);end;

解决方案 »

  1.   

    将DLL函数修改为如下:
    procedure OpenForm(frm:TForm);
    begin
      try
        frm := Tfrm.Create(nil);//此处出错,说Tfrm没有定义,这是为什么呢?
        frm.ShowModal;
      finally
        frm.Free;
      end;
    end;
      

  2.   

    动态库单元要引用窗体单元,调用这个单元的窗体要把Application.handle传给被调用的动态库窗体
      

  3.   

    DLL中的函数: 
    TFormClass = class of Tform;procedure   OpenForm(frm:TFormClass ); 
    begin 
       with frm.Create(Application) do
       begin
         ShowModal;
       end;
    end; 主程序中的调用语句: 
    implementation 
    uses   SelectTYPJ_frm; 
    procedure   OpenForm(frm:TFormClass );stdcall;external   'pub.dll' procedure TfrmInputPJ.grdT0103KeyDown(Sender:TObject; var Key:Word;  Shift:   TShiftState); 
    begin         OpenForm(TfrmSelectTYPJ); end;这样可以的,如果有问题,留言!