暂不探讨这么一个抽象类提供了多少可供实用的方法和接口 因为我们要讨论的是一种技术上的可行性假设作者定义此接口的初衷只是希望获得任意多变化的 Title而具体 GetTitle 的返回值是什么需要靠子类来实现并且 作者还希望子类的代码放在 Dll 中实现 与主程序分离 这样的方式很有些插件的味道 或许还能实现 Plug&Play 的某些特性 是不是挺吸引人啊?那么 下一不应该怎么做呢?
首先主程序和 Dll 程序应当将上述声明的单元包含进来 然后 主程序负责实现一个驱动 动态加载 Dll动态加载类 ; 而 Dll 负责实现子类
先说 Dll 吧 Dll 应当做什么工作?
第二步 Dll 中导出子类 :
我们设计了以下两个导出函数 :
. function GetClassCount: integer; stdcall;
告诉调用者 本 Dll 中共有几个子类 ;
. function GetClassTypeByIndex(const iIndex: integer;
var ClassType: MyBaseFormClass): WordBool; stdcall;
以索引方式获得具体的子类注意 此处的 ClassType 的类型是 MyBaseFormClass这表明 它的值将是一个确定的自 TMyBaseForm 继承而来的类
以下是它们可能的一种实现 :
function GetClassCount: integer;
begin
result := ; // 表明本 Dll 中导出了 个类
end;
function GetClassTypeByIndex(const iIndex: integer;
var ClassType: MyBaseFormClass): WordBool;
begin
result := True;
case iIndex of
: ClassType := TFrmTest;
: ClassType := TFrmTest;
: ClassType := TFrmTest;
else
result := False;
end;
end;
[] [] []