第三步 ,主程序驅動引擎的實現 :
這一步相對來說容易些 -- 無非是動態加載 Dll,然後調用 GetClassCount 函數 ,接著調用 GetClassByIndex 。關鍵的代碼 :
Var AClass: TMyBaseClass;
AForm: TMyBaseForm;
I, iCount: integer;
blResult: Boolean;
begin
// 略去加載動態庫的部分 ,假定 FPGetClassProc 指向 GetClassCount 函數 ,FPGetClassByIndexProc 指向 GetClassByIndex,則 :
iCount := FPGetClassProc;
for I := 0 to iCount - 1 do
begin
AClass := FPGetClassByIndex(I, blResult);
if blResult then
begin
AForm := AClass.Create(Application);
AForm.Caption := AForm.GetTitle;
AForm.Show;
end;
end;
// …
end;
注意一點 ,和 Dll 相似 ,創建輸出文件的時候 ,也需要選擇使用運行時間包 。這是因為 ,如果不使用運行時間包 ,將導致相同的類在內存中有多個副本 ,因 而對它們使用 Is 操作符的將返回 False 的結果。