Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.07.24;
Скачать: CL | DM;

Вниз

Record -> String (2)   Найти похожие ветки 

 
K-1000 ©   (2015-11-09 11:37) [0]

Решил всё же сделать функцию перевода структуры в строку:


uses
 RTTI;

type  
 TMyRecord =  record
   dmDummy: String [32]; // Или array [0..31] of WideChar;
 end;

type
 TTestRecord = TMyRecord; // TPixelFormatDescriptor;

procedure RecordToList(const Value: TTestRecord; List: TStrings);
var
 i:          LongInt;
 RTTIType:   TRTTIType;
 RTTIFields: TArray<TRTTIField>;
begin                        
 RTTIType:= TRTTIContext.Create().GetType(TypeInfo(TTestRecord));
 try
   RTTIFields:= RTTIType.GetFields();

   List.Add(RTTIType.ToString());
   
   for i:= 0 to High(RTTIFields) do
   begin
     List.Add(Format("  %s: %s (%s)", [RTTIFields[i].Name,
                                       RTTIFields[i].FieldType.ToString(),
                                       RTTIFields[i].GetValue(@Value).ToString()]));
   end;
 finally
   FreeAndNil(RTTIType);
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 Desc: TTestRecord;
begin          
 ZeroMemory(@Desc, SizeOf(Desc));

 RecordToList(Desc, Memo1.Lines);
end;


Функция отлично работает, если TTestRecord равен допустим TPixelFormatDescriptor.
Но как только появляется поле с фиксированной длинной строки (TTestRecord равен TMyRecord), то вылетает с AV.

Как это дело побороть?


 
Kerk ©   (2015-11-09 11:56) [1]

Проверяй FieldType на nil. Похоже в RTTI нет информации о таких типах. Странно.


 
K-1000 ©   (2015-11-09 12:27) [2]

Да, возвращает nil.


 
K-1000 ©   (2015-11-11 09:40) [3]

Как побороть?



Страницы: 1 вся ветка

Текущий архив: 2016.07.24;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
2-1416409472
M.A.
2014-11-19 18:04
2016.07.24
GDI+ Подскажите пожалуйста, как расчитать пропорции изображения.


4-1277230542
Отшельник
2010-06-22 22:15
2016.07.24
Изменить значение в памяти чужой программы которое берется из INI


15-1447171629
DayGaykin
2015-11-10 19:07
2016.07.24
HTML, Chrome, Вложенные таблицы - помогите сформулировать вопрос


11-1260089096
RusSun
2009-12-06 11:44
2016.07.24
[Error] scaledemo1.pas(124)


15-1443997088
pavelnk
2015-10-05 01:18
2016.07.24
Куда выложить код?