我在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