Einzelnen Beitrag anzeigen

Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#1

String-Übergabe von Delphi-DLL an C#

  Alt 3. Apr 2013, 10:23
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
  Mit Zitat antworten Zitat