如何在运行时获取项目中定义的类列表?

时间:2011-10-12 12:43:35

标签: delphi

我想从TList中的当前项目加载所有类。如果我像普通文件一样读取dpr文件,它将只返回字符串。我想获得dpr文件中定义的所有类及其名称。有人知道怎么做吗?

1 个答案:

答案 0 :(得分:6)

在Delphi IDE 中,所有类都在.dcu文件中,对应于每个.pas文件。这些.dcu文件具有专有的二进制演进格式,因此不能在IDE之外使用。

在程序执行和exe文件中,没有所有现有类的列表。您可以使用RTTI函数检索有关已知类的信息(请参阅the Embarcadero documentation所述的TypInfo.pas和亲属)。因此,在运行时,您只需从给定的类中检索信息:您可以使用例如anObject.ClassNameanObject.ClassType方法。

但我怀疑你想从源代码中检索项目中定义的所有类。为此,您需要一个源代码解析器,它将从.pas文件中提取逻辑。简而言之,解析器将读取.dpr然后所有必需的.pas文件源代码,解释对象pascal类型定义,并创建单元,类,方法和属性的列表。有几个解析器:例如,请参阅PasDoc或我们在SynProject中嵌入的版本。

附加说明 - 有关详尽列表:如果在编译期间生成.map文件,则此文本文件将包含可执行文件的所有符号名称,包括类。你将不得不解析它,但没有太多的信息需要处理,因为没有简单的方法来猜测每个符号是一个类还是一个记录,或者关于类的继承或属性...... .map旨在执行调试,而不是RTTI。