Hallo,
habe ein kleines Problem. Ich möchte zwischen Hauptanwendung und
DLL einen String übergeben. Dies mache ich mit Hilfe des Pointers. Es wird auch alles übergeben und angezeigt, doch beim Beenden des Programmes kommen AVs. Das würde für mich auf ein Speicherleck deuten, da ich evtl nicht genug Speicher genommen habe. So hab ich es gemacht:
Delphi-Quellcode:
===Hauptanwendung===
procedure HierMeinPointer(Adresse: Pointer; laenge: Integer);
Aufruf:
var
test:
String;
begin
test:='
liesMich';
HierMeinPointer(@test, length(test);
end;
===
DLL===
procedure TMyDll.LiesDenString(Adresse: Pointer; laenge: Integer);
var
meinString:
String;
begin
SetLength(meinString, laenge+1);
//Wegen 0-Terminierung
meinString:=PString(Adresse)^;
ShowMessage(meinString);
//FreeMem(Adresse); (siehe Text unten)
end;
Das klappt auch wunderbar. Nur kommt beim Beenden eine
AV, obwohl ich ein Zeichen mehr geholt habe. Ich dachte dann, es liegt am Freigeben des Speichers, also habe ich FreeMem (jetzt auskommentiert) angewandt, aber dies liefert die Fehlermeldung "EInvalidPointer.
Was mache ich falsch? Danke