这一步相对来说容易些——无非是动态加载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的结果。