OK, jetzt habe ich folgenden Code und eine EAccessViolation:
Delphi-Quellcode:
// save nodes to disk
procedure TForm1.VST1SaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
Stream: TStream);
var
Data: PTreeData;
Len: integer;
begin
Data := VST1.GetNodeData(Node);
Stream.Write(TSessionObject(Data.FObject).datum, SizeOf(TSessionObject(Data.FObject).datum));
Len := Length(TSessionObject(Data.FObject).name);
Stream.Write(Len, SizeOf(Len));
Stream.write(PChar(TSessionObject(Data.FObject).name)^, Len);
//[... die restlichen Parameter]
end;
Delphi-Quellcode:
// load nodes from disk
procedure TForm1.VST1LoadNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
Stream: TStream);
var
Data: PTreeData;
Len,datum,ndatum: integer;
SessionObject: TSessionObject;
name,sessiontyp,protokollant,teilnehmer,verteiler:
string;
begin
Data := VST1.GetNodeData(Node);
SessionObject:=TSessionObject.Create;
Stream.
Read(datum, SizeOf(datum));
Stream.
read(Len, SizeOf(Len));
SetLength(
name, Len);
Stream.
read(
name, Len);
// [... + der rest]
SessionObject.datum:=datum;
SessionObject.
name:=name;
// <--------------- hier kommt die Exception
// [... + der rest]
Data^.FObject:=SessionObject;
end;
Aber wieso die
Exception? Irgendwo ein Pointer oder ein Objekt nicht richtig?
EDIT: Habe die Zeile markiert, wo die Exc geworfen wird. Muss aber jetzt leider für heute weg. Komme beim nächsten Arbeitstag wieder auf diesen Thread zurück. Danke soweit!