2009-06-12 17 views
0

我正在瀏覽大部分應用程序並將它們移植到D2009,並且我有一個使用動態包的應用程序。對於我的生活,我無法讓我的主機應用程序識別在包中註冊的類。我追溯到被加載的包中的初始化部分被調用並且RegisterClasses被調用,但是當我執行GetClass()調用時,類不可用。有沒有人能夠啓發我可能發生的事情?我研究了一下,看看D2009版本和動態軟件包是否有問題,到目前爲止我什麼都沒有發現。我開始懷疑我的Delphi是否安裝損壞或其他問題。如何識別Delphi包中的註冊類

TIA

+2

您是否重建過D2009中的主機和所有軟件包? 同時檢查您的主機是否使用運行時軟件包進行編譯。 – 2009-06-12 09:15:11

回答

2

如果您正在使用第三方內存管理器,然後確保它被證明與D2009(實際上2007年及以上)工作。

隨着FastMM(這是默認的MM自2007年起),你就必須設置UseRuntimePackages定義FastMM4Options.inc

0

確保下列步驟完成:

  • 創建新的軟件包在德爾福;
  • 在此包中插入一個表單;
  • 在窗體中插入「inicialization」部分並使用RegisterClass方法。 (的registerClass(TForm1));不要忘記「T」。
  • 保存並編譯包;
  • 關閉所有;
  • 將.bpl文件(c:\ Users \ Public \ Documents \ RAD Studio \ 5.0 \ Bpl)複製到應用程序文件夾;
  • 在Delphi中創建一個新的應用程序;
  • 進入項目>選項>軟件包,並勾選「使用運行時軟件包構建」複選框;
  • 在文本字段中只保留「vcl; rtl」並單擊確定按鈕;
  • 插入一個按鈕;
  • 在按鈕的源,插入的代碼:

過程TForm1.Button1Click(發信人:TObject的);

var

PackageModule:HModule; AClass:TPersistentClass;

開始

PackageModule:= LoadPackage( 'Package1.bpl');如果PackageModule <> 0,那麼 開始 AClass:= GetClass('TForm2');如果包模塊<> 0,則 開始

if AClass <> nil then 
    with TComponentClass(AClass).Create(Application) 
    as TCustomForm do 
    begin 
    ShowModal; 
    Free; 
    end; 

UnloadPackage(PackageModule); 

end;

end;

  • 編譯應用程序。=)