Hi
Wenn ich in C# einen String aus einer Delphi-
DLL haben möchte, stürzt die C#-Anwendung ab.
Jetzt wurde mir gesagt, daß ich es so machen soll:
Delphi-Quellcode:
[DllImport("delphiDLL.dll")]
private static extern IntPtr delphi_getString();
...
IntPtr pStr = delphi_getString();
string str = Marshal.PtrToStringAnsi(pStr);
// now pinvoke to free string if needed
delphi_freeString(pStr);
...
Die Funktion delphi_getString sieht so aus:
Delphi-Quellcode:
function delphi_getString():PAnsiChar; cdecl; exports delphi_getString;
function delphi_getString():PAnsiChar;
var text:string;
Begin
text:='TestString';
result:=PAnsiChar(AnsiString(text));
End;
Was mich jetzt interessiert, ist die letzte Anweisung in dem C#-Code.
delphi_freeString(pStr);
Soweit ich weiß, werden doch in Delphi lokale Variablen und Pointer automatisch aus dem Speicher entfernt, wenn die Funktion beendet ist. Auch
IntPtr pStr sollte in C# nur solange gültig sein, bis auch dort die Funktion beendet ist.
Oder irre ich mich hier komplett?
Danke