Hallo jbg,
das Rekord ist in keiner Weise initialisiert. D.h. es ist einfach eine lokale Variable in einer Prozedur, die durch drei Aufrufe bis an
fread_AWSTRING gegeben wird:
Delphi-Quellcode:
type
generic_data_header = record
data_type_id: ASTRING;
unique_file_id: ASTRING;
date_time: AWSTRING;
locale: AWSTRING;
n_name_type_value: int32_t;
name_type_value: array of nvt_triplet;
n_parent_headers: array of Pointer;
end;
function Read_Generic(const filename: string): boolean;
var
fs: TFileStream;
my_data_header: generic_data_header;
begin
Result := false;
fs := TFileStream.Create(filename, fmOpenRead or fmShareDenyNone);
try
read_generic_data_header(my_data_header, fs);
finally
FreeAndNil(fs);
end;
Result := true;
end;
function read_generic_data_header(var data_header: generic_data_header; fs: TFileStream): integer;
begin
Result := fread_ASTRING(data_header.data_type_id, fs) or
fread_ASTRING(data_header.unique_file_id, fs) or
fread_AWSTRING(data_header.date_time, fs) or
fread_AWSTRING(data_header.locale, fs);
end;
Da wir uns aber ja unter Delphi befinden, habe ich nicht den Drang verspürt für den WideString großartig Speicher zu belegen. Wenn ich eine lokale Widestring-Variable, die nicht in einem Array ist, fülle, dann brauche ich ja auch nix zu belegen, sondern es funktioniert dank Compiler-Magic.
Gruß
Christopher