我想加載TList中當前項目的所有類。如果我像普通文件一樣讀取dpr文件,它將只返回字符串。我想獲得dpr文件中定義的所有類及其名稱。有人知道如何做到這一點?如何在運行時獲取項目中定義的類的列表?
3
A
回答
6
在Delphi IDE中,所有類都在.dcu文件中可用,對應於每個.pas文件。這些.dcu文件具有專有的二進制演進格式,因此無法在IDE之外使用。
在程序執行,並在exe文件中,沒有列出所有現有的類。您可以使用RTTI功能檢索有關已知班級的信息(請參閱TypInfo.pas
和the Embarcadero documentation所述的親屬)。所以在運行時,你可以從給定的類中檢索信息:你可以使用例如anObject.ClassName
或anObject.ClassType
方法。
但我懷疑你想要檢索項目中定義的所有類,從的源代碼。爲此,您將需要一個源代碼解析器,它將從.pas文件中提取邏輯。簡而言之,解析器將讀取.dpr,然後讀取所有必需的.pas文件源代碼,解釋對象pascal類型定義,並創建單元,類,方法和屬性的列表。有幾個解析器:例如,請參閱PasDoc或我們在SynProject中嵌入的版本。
附加說明 - 有關詳盡列表:如果在編譯期間生成.map文件,則此文本文件將包含可執行文件的所有符號名稱,包括類。你必須解析它,但不會有太多的信息需要處理,因爲沒有簡單的方法來猜測每個符號是類還是記錄,或者有關類繼承或屬性...... .map用於執行調試,而不是RTTI。
相關問題
- 1. 獲取Windows運行時組列表中的所有項目ListView
- 2. 如何獲取具有特定子項目的項目列表?
- 3. 使用SPServices從Sharepoint列表中獲取項目時,項目未定義
- 4. 如何獲取CollectionBase項目的列表?
- 5. 獲取項目中定義的所有燈具名稱列表
- 6. 如何獲取項目中現有類的列表?
- 7. C#在運行時獲取定義字典的類型
- 8. 如何在運行時獲取自定義功能的版本?
- 9. 如何從列表視圖中的選定項目獲取值?
- 10. 如何在DragOver事件中獲取列表框選定項目
- 11. 片段自定義列表視圖:獲取運行時錯誤
- 12. 在運行時定義的類型列表
- 13. 硒。滾動列表時如何獲取項目列表?
- 14. 如何在asp中的列表框中獲取選定的項目?
- 15. 如何在列表中的項目上運行比較功能?
- 16. 在列表中獲取ArrayList中的特定項目Java
- 17. 如何從所有Jenkins項目類型中獲取列表
- 18. Spring批處理:在運行時獲取已定義作業的列表
- 19. C#VS 2005:如何在運行時獲取類的公共成員列表?
- 20. 如何在python列表中的東西后獲取項目?
- 21. Magento - 如何獲取我的自定義屬性選項列表?
- 22. 如何從TFS獲取項目列表?
- 23. 定義列表中的項目順序
- 24. 獲取類別和此類別中的項目列表
- 25. 如何批量從項目列表中獲取子項目?
- 26. 如何在運行時添加項目到列表視圖
- 27. 如何獲取只有列表的指定項目?
- 28. 如何獲取嵌套列表視圖的選定項目?
- 29. 如何獲取加載的運行時包的列表?
- 30. 獲取java項目中的包列表
類通常不會在.dpr文件中引用。單位是。 –
確定如何加載單位? –
「當前項目的課程」是什麼意思?如果您指的是編譯到可執行文件中的所有類的列表(假設來自您的[上一個問題](http://stackoverflow.com/questions/7737897/delphi-getclass)),則不存在這樣的列表。您可以使用RegisterClasses或您自己的註冊方案,例如有一個帶有字符串的全局TStringList,持有類名和對象持有TClass引用。 –