{------------------以下是调用包的主程序-----------------------}
unit TestImp;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,PackageUnit, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation
var
  DMpk:HMODULE;
  h:TPersistentClass;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
DMpk:=LoadPackage('test1.bpl');
h := GetClass('TfrmPackage');
frmPackage:=TfrmPackage(TComponentClass(h).Create(Application));//程序执行到这儿就出错,什么内存冲突
frmpackage.ShowModal;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if DMpk<>0 then UnLoadPackage(DMpk);
end;end.

解决方案 »

  1.   

    frmPackage:=TfrmPackage(TComponentClass(h).Create(Application));// 改成frmPackage:=TfrmPackage.Create(nil)应该可以吧
      

  2.   

    既然是用包,怎么把包里的单元引用上了?~~那还LoadPackage干什么?~~关键是GetClass没找到类~~需要在编译选项中打开“Build with Runtime Package”选项~~虽然问题已经结了,不过问题和答案都偏离了~~
      

  3.   

    根据楼上的意思,是在uses里把PackageUnit去掉,然后在哪儿有这个“Build with Runtime Package”?谢谢楼上的回答!
      

  4.   

    Delphi Menu->Project->Options->Packages页//记得要把包里的窗体类注册~~
    initialization
      RegisterClass(TfrmPackage);finalization
      UnregisterClass(TfrmPackage);end.