Según lo prometido aquí está: http://kblib.googlecode.com
Cuando haya definido, por ejemplo, registro como:
TTestRecord = record
I: Integer;
D: Double;
U: UnicodeString;
W: WideString;
A: AnsiString;
Options: TKBDynamicOptions;
IA: array[0..2] of Integer;
AI: TIntegerDynArray;
AD: TDoubleDynArray;
AU: array of UnicodeString;
AW: TWideStringDynArray;
AA: array of AnsiString;
R: array of TTestRecord; // record contain dynamic array of itself (D2009+)
end;
Puede guardar el registro dinámico conjunto para transmitir (como datos binarios) por:
TKBDynamic.WriteTo(lStream, lTestRecord, TypeInfo(TTestRecord));
Para cargarlo:
TKBDynamic.ReadFrom(lStream, lTestRecord, TypeInfo(TTestRecord));
No tiene por qué ser un registro, puede hacerlo mismo para cualquier tipo dinámico como:
TKBDynamic.WriteTo(lStream, lStr, TypeInfo(UnicodeString));
TKBDynamic.WriteTo(lStream, lInts, TypeInfo(TIntegerDynArray));
TKBDynamic.WriteTo(lStream, lArrayOfTestRecord, TypeInfo(TArrayOfTestRecord)); // TArrayOfTestRecord = array of TTestRecord;
probado en Delphi 2006/2009/XE. Licencia: MPL 1.1/GPL 2.0/LGPL 3.0 Consulte el archivo léame para obtener información.
http://delphi.about.com/od/fileio/a/fileof_delphi.htm También asegúrese de usar un 'registro lleno' porque la alineación de la memoria de los registros regulares está sujeta a cambios entre las versiones –
Una nueva [OpenSource unidad y clases] (http://blog.synopse.info/post/2011/03/12/TDynArray-and-Record-compare/load/save-using- fast -RTTI) que vale la pena considerar para serializar registros o matrices dinámicas (con muchas más funciones que la serialización), trabajando para Delphi 5 hasta XE2. Usar cadenas cortas no es una opción en mi humilde opinión desde Delphi 2009, ya que esas cadenas son cadenas Ansi, y perderás mucho espacio de archivos. –
¿Por qué no quieres guardar cada campo individualmente? no es tan difícil de todos modos. Agregue un método a su procedimiento de registro MyRec.WriteToStream (DiskStream: TStream). En ese método, guarde cada campo de registro en la secuencia. En lugar de utilizar una biblioteca de terceros, su código no es autónomo. Y gastó solo unas pocas líneas adicionales de código (aproximadamente una para cada campo). No es tan malo! Algunas bibliotecas recomendadas aquí ya se han ido (superobjeto). – Ampere