Форум: "Основная";
Текущий архив: 2017.11.12;
Скачать: [xml.tar.bz2];
ВнизRTTI. Бесчеловечный AV для некоторых типов Найти похожие ветки
← →
mfender (2012-12-09 10:27) [0]Не работает GetTypeData() для отдельных типов.
var
L: TList;
TypeData: PTypeData;
begin
L := TList.Create;
TypeData := GetTypeData(L.ClassInfo);
Инспектировать L.ClassInfo невозможно. Но что-то там есть. AV вываливается на GetTypeData(). Было испробовано на TList, на производных TStrings. Хотя, казалось бы, с чего бы это?
Есть ли объяснение этому феномену?
← →
Dimka Maslov © (2012-12-09 10:33) [1]Может в настройках/опциях чего не так установлено?
← →
mfender (2012-12-09 11:40) [2]Чёрт, вот только сейчас подумалось: у них нет published-свойств.
← →
mfender (2012-12-09 12:23) [3]Тогда такой вопрос: каким образом сериализовать например TList.Items?
Есть такая вот функция, которая рисует на выходе TlkJSONObject:
class function TjClient.ObjecttoJSON(AObj: TObject): TlkJSONObject;
var
I: Integer;
Cls: TClass;
PropCnt: Integer;
TypeData: PTypeData;
PropList: PPropList;
PropInfo: PPropInfo;
begin
try
Result := TlkJSONObject.Create(True);
TypeData := GetTypeData(AObj.ClassInfo);
if TypeData.PropCount > 0 then
begin
GetMem(PropList, SizeOf(PropInfo) * TypeData.PropCount);
try
TypInfo.GetPropInfos(AObj.ClassInfo, PropList);
for I := 0 to Pred(TypeData.PropCount) do
begin
case PropList[I].PropType^.Kind of
tkSet:
Result.Add(PropList[I]^.Name, GetSetProp(AObj, PropList[I]));
tkEnumeration, tkInteger:
Result.Add(PropList[I]^.Name, GetOrdProp(AObj, PropList[I]));
tkFloat:
Result.Add(PropList[I]^.Name, GetFloatProp(AObj, PropList[I]));
tkString, tkLString, tkWString:
Result.Add(PropList[I]^.Name, GetStrProp(AObj, PropList[I]));
tkClass:
Result.Add(PropList[I]^.Name,
ObjecttoJSON(GetObjectProp(AObj, PropList[I])) as TlkJSONBase);
end;
end;
finally
FreeMem(PropList, SizeOf(PropInfo) * TypeData.PropCount);
end;
end;
except
end;
end;
С объектами то она нормально обращается.
Пытаюсь опубликовать Items:
{$M+}
TMyList = class(TList)
public
property Items[Index: Integer]: Pointer read Get write Put; default;
end;
{$M-}
И всё, и тишина. TypeData.PropCount показывает 0.
Как добраться до него?
← →
mfender (2012-12-09 12:25) [4]Ах, да. published из него не сделать. Published property "Items" cannot be of type ARRAY
← →
Игорь Шевченко © (2012-12-10 12:43) [5]
> Тогда такой вопрос: каким образом сериализовать например
> TList.Items
через DefineProperties
← →
icWasya © (2012-12-10 15:36) [6]не столько cannot be of type ARRAY, сколько Pointer
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2017.11.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.001 c