GetMem reserviert nur Speicher
New reserviert und initialisiert den Speicher
ein dynamische Arrays und Strings müssen initialisiert werden, da die Speicherverwaltung dieser Strukturen sonst falsche Daten bekommt, as zu Fehlern führt.
wenn man weiß, wie initialisert werden muß, kann man es auch selber machen.
Delphi-Quellcode:
procedure TTestform.Button1Click(Sender: TObject);
Var testwert :
string;
begin
testwert := GetString;
//String aus DLL!!!!!! über sharemem geholt
//Testwert := #1#2#3#4#5#6; //<-- dieser code geht
getmem(Buffer,Datasize + sizeof(TRecordInfo));
Fillchar(Buffer^,Datasize + sizeof(TRecordInfo), #0);
With PRecordInfo(Pointer(integer(Buffer) + Datasize))^
do
begin
GetMem(Bookmark , sizeof(TBookmarkInfo) );
FillChar(Bookmark^, sizeof(TBookmarkInfo), 0);
//New(PBookmarkinfo(Bookmark));
PBookmarkInfo(bookmark)^.BookmarkStr := testwert;
end;
end;