Информация есть, но разбор Квалифицированного Имени в настоящее время является лучшим способом получить его.
Если вы хотите сделать это трудным путем, вы можете:
В модуле system.pas у вас есть переменная LibModuleList: PLibModule = nil;
, которая содержит
список загруженных модулей. Это указатель на необработанную информацию RTTI, которую можно использовать без RTTI.pas. Вы можете перебрать всю необработанную информацию, чтобы определить имя устройства.
Ключевые значения модуля TLibModule:
PLibModule = ^TLibModule;
TLibModule = record
Next: PLibModule; { Linked List of Loaded Modules)
Instance: LongWord;
...
TypeInfo: PPackageTypeInfo; { List of contained Package Information }
...
end;
Используя TypeInfo: PPackageTypeInfo;
, вы получаете доступ к
PPackageTypeInfo = ^TPackageTypeInfo;
TPackageTypeInfo = record
TypeCount: Integer;
TypeTable: PTypeTable;
UnitCount: Integer;
UnitNames: PShortString; { concatenation of Pascal strings,
one for each unit }
end;
Затем существует TypeTable, в котором содержится информация для доступа к PTypeInfo.
последовательность.
TTypeTable = array[0..MaxInt div SizeOf(Pointer) - 1] of Pointer;
PTypeTable = ^TTypeTable;
Пример того, как все это работает, можно найти в Rtti.pas TPackage.MakeTypeLookupTable
- это ключевой метод. Этот метод также показывает, что QualifiedName всегда будет содержать UnitName. Таким образом, ваш оригинальный метод синтаксического анализа QualfiedName может зависеть от.