procedure TForm1.btn1Click(Sender: TObject);
var
  pack: HMODULE;
  aclass: TPersistentClass;
begin
  pack := LoadPackage('package1.bpl');
  if pack <> 0 then
  begin
    aclass := GetClass('TForm1');  //这里取不到值
    if aclass <> nil then  
    begin
      with TComponentClass(aclass).Create(Application) as TCustomForm do
      begin
        ShowModal;
        Free;
      end;
    end;
  end;
  UnloadPackage(pack);
end;   不知道为什么aclass一直都是nil。   在package1.bpl中的contains下的unit1.pas中已加放
  
initialization
  RegisterClass(TForm1);
finalization
   RegisterClass(TForm1);   
   

解决方案 »

  1.   

    主程序,点开项目属性,"build with runtime packages"那里构选,然后引用的包必须包含rtl你的package1中,require的包也要包含rtl这个包然后就可以了,发布时需要连同对应DELPHI版本的RTL包发布(例如delphi 7的是rtl70.bpl)出这个问题的根本原因是,主程序和package1中的classes单元不是共享的,是独立的拷贝。因此你的类只在package1中注册上了,但主程序是不知道的。如上修改后,classes单元被两者共享,从而就可以找到类了。