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

Delphi 如何在运行时获取项目中定义的类列表?,delphi,Delphi,我想在TList中加载当前项目中的所有类。如果我像普通文件一样读取dpr文件,它将只返回字符串。我想获取dpr文件中定义的所有类及其名称。有人知道怎么做吗?在Delphi IDE中,所有类都位于.dcu文件中,对应于每个.pas文件。这些.dcu文件具有专有的二进制格式,因此不能在IDE之外使用 在程序执行时,exe文件中没有所有现有类的列表。您可以使用RTTI函数检索有关已知类的信息(请参见TypInfo.pas和中所述的相关信息)。因此,在运行时,您只需从给定的类检索信息:您可以使用例如an

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

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

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

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


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

类通常不会在.dpr文件中引用。单位是。你说的“来自当前项目的课程”是什么意思?如果您的意思是编译到可执行文件中的所有类的列表(假设来自您的),则不存在这样的列表。您可以使用RegisterClass或您自己的注册方案,例如,拥有一个全局TStringList,其中字符串包含类名,对象包含TClass引用。我现在正在这样做。我只想在这个项目中有一个动态,这是唯一的方法,因为编译器不会生成所有编译类的列表。但是,如果您使用的是运行时软件包,您可以如图所示枚举导出。您可能需要编辑您的问题,因为它非常不清楚。如果人们了解你想要什么,你可能会得到更好的帮助。