Ach andersrum
in Delphi gefüllt -> in C# lesen
in C# gefüllt -> in Delphi lesen
Jetzt müsste man wissen, wie im C# deren "String" intern aufgebaut ist.
Ich würde mal vermuten es ist ein
PPChar ... ein PChar-kompatibler Typ, der in einem Objekt verpackt wurde.
Hilft aber nur, wenn du manuell die Konvertierung/Übergabe machst.
Vermutete einfachste Lösung: benutze das, was im C# einem BSTR (aka WideString) entspricht.
Oder eben einen OleVariant.
Man kann sich auf das Minimum konzentrieren und muß auf der anderen Seite etwas Gleichwertiges, oder zumindest Kompatibles finden.
PChar ist ein Zeiger auf Chars, die durch #0 terminiert (abgeschlossen) werden.
Die "LongStrings" von Delphi (String, AnsiString, UnicocdeString) sind intern kompatibel mit einem PChar.
-> die Verwaltungsdaten liegen rückwertig vor dem internen Zeiger (der auf das erste Char zeigt) und hinter dem letzten Char befinden sich implizit zwei #0.
Drum lässt sich ein String problemlos in einen PChar casten.
Der ShortString (hieß gaaaaanz früher mal "string") ist ein Record, bzw. statisches CharArray, wo der Char[0] das Längenbyte darstellt. (drum fangen im Delphi auch alle Strings auch mit 1 an
)
Der "
OLE-String" WideString basiert intern auf einem BSTR und benutzt die APIs SysAllocString/SysReAllocString/SysFreeString der oleauto.h bzw. OleAut32.dll.