Jul. 21st, 2007

esyr: (Default)
…депрессия накрывает всё сильнее.
esyr: (ночь)
Повбывал бы за отсутствие документации по дельфёвому RTTI. То немного, что удалось вытащить из неё, это то, что проперши, точнее, TPropInfo может иметь тип, точнее, TTypeKind следующих видов:
tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat, tkString, tkSet, tkClass, tkMethod, tkWChar, tkLString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkDynArray
Дальше надо уже лезть в TypInfo.pas и ныкаться по всяким форумам. Но вот из того же TypInfo.pas совершенно непонятно, как по тому, что у нас есть экземпляр записи TTypeInfo с TTypeKind tkRecord, то есть, проперти-запись, узнать поля этой записи. Или по массиву узнать его характеристики (хотя, для массива таки есть GetTypeData (у которого, кстати, превосходный исходнк:
function GetTypeData(TypeInfo: PTypeInfo): PTypeData;
asm
        { ->    EAX Pointer to type info }
        { <-    EAX Pointer to type data }
        {       it's really just to skip the kind and the name  }
        XOR     EDX,EDX
        MOV     DL,[EAX].TTypeInfo.Name.Byte[0]
        LEA     EAX,[EAX].TTypeInfo.Name[EDX+1]
end;
), который выдаёт TTypeData — монструозную структуру, в которой таки есть размер динамического массива и тип элементов, но у типа тип PPTypeInfo, и что пока с этим делать, не совсем понятно, хотя…). На самом деле, обе проблемы обходятся (первая — вложенным сериализуемым классом, структура которого повторяет структуру записи, вторая — сериализуемым списком сериализуемых объектов), но как-то коряво.
И ещё надо не забыть про версионинг, хотя ещё не уверен, нужен ли он тут.

Profile

esyr: (Default)
esyr

October 2010

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 6th, 2026 06:02 am
Powered by Dreamwidth Studios