Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1467650458
Pavia
2016-07-04 19:40
2017.11.12
Баг с юникодом


6-1273560246
YurikGL
2010-05-11 10:44
2017.11.12
Модуль Whois, определение города и оператора связи по ip-ку.


15-1467495002
Юрий
2016-07-03 00:30
2017.11.12
С днем рождения ! 3 июля 2016 воскресенье


2-1450384249
Max
2015-12-17 23:30
2017.11.12
Сделать в stringgrid строки enabled.Афды


2-1450086211
TheEd
2015-12-14 12:43
2017.11.12
как отловить необходимость погасить кнопку в ячейке StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский