我在Delphi XE工作来提供,Windows 7的能“未使用”班班德尔福XE
在一个应用程序,我想启用不同的报告类型为我的用户选择。 为此,我有1个基本报告类和每个报告类型的子类(xml,csv,ppt等)。
{Just an illustrating example}
TBaseReport = class
public
constructor Create;
procedure GenerateReport; virtual; abstract;
class function ReportType: string; virtual; abstract;
end;
T*Report = class(TBaseReport);
//Etcetera.
我想要做的就是使用Rtti来检测所有报告类并列出它们的ReportType。 之后,我想使用Rtti创建所选报告类的实例并调用GenerateReport。总而言之,这不难实现。
但是有一个主要的缺点:我从来没有对降序类的使用进行硬编码,所以代码没有包含在可执行文件中。
有没有一种体面的方式来强制链接器/编译器包含这些类?
解决办法是模拟报告在初始化部分的使用情况,但我宁愿不这样做。 更好的解决方案是使基类持久化并调用'RegisterClass(T * Report)';'在初始化部分。它有效,但我没有看到任何其他需要让它们持久存在,所以我再也不想这样做。另一方面,也许这是做到这一点的唯一方法?
在此先感谢。
这是做到这一点的方法。关于你的最后一点,没有更多的RTTI作为更多的代码 –
我看到STRONGLINKTYPES的范围是全局的。你知道是否还有本地等价物? – deColaman
刚刚为我的应用程序打开它以检查文件大小的增加。 exe从8.3MB增加到9.9MB。虽然这看起来很多,但好处超过我想的额外大小。 – deColaman