當然 在該單元的 Use 列表中應當將 TFrmTest TFrmTest 以及 TFrmTest 所在的單元包含進來而 TFrmTest 的實現可以象這樣 :
TFrmTest = Class(TMyBaseForm)
protected
function GetTitle: PChar; override;
end;
function TFrmTestGetTitle: Pchar;
begin
result := Hello from TFrmTest;
end;
末了 別忘了將 GetClassCount 和 GetClassByIndex 加到 Exports 列表中然後 Build 該 Dll 工程的時候 請將 Project optionpackage 中的 使用運行包 use runtime package 打勾至於具體的原因後面講
至此 Dll 方面的工作告一段落
第三步 主程序驅動引擎的實現 :
這一步相對來說容易些 無非是動態加載 Dll然後調用 GetClassCount 函數 接著調用 GetClassByIndex 關鍵的代碼 :
Var AClass: TMyBaseClass;
AForm: TMyBaseForm;
I iCount: integer;
blResult: Boolean;
begin
// 略去加載動態庫的部分 假定 FPGetClassProc 指向 GetClassCount 函數 FPGetClassByIndexProc 指向 GetClassByIndex則 :
iCount := FPGetClassProc;
for I := to iCount do
begin
AClass := FPGetClassByIndex(I blResult);
if blResult then
begin
AForm := AClassCreate(Application);
AFormCaption := AFormGetTitle;
AFormShow;
end;
end;
// …
end;
注意一點 和 Dll 相似 創建輸出文件的時候 也需要選擇使用運行時間包這是因為 如果不使用運行時間包 將導致相同的類在內存中有多個副本 因而對它們使用 Is 操作符的將返回 False 的結果
[] [] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/24859.html