0 ist definitiv falsch
PWideChar(@Antwort[1])
oder besser
PWideChar(@Antwort[Low(string)])
(für die kurze Era wo das mal im Mobilen-Delphi ausprobiert wurde)
oder einfach nur direkt
PWideChar(Antwort)
, denn Ersteres knallt dir bei einem leeren String (Length=0) gnadenlos eine
Exception entgegen.
https://docwiki.embarcadero.com/RADS...rings_(Delphi)
Für AnsiString's und UnicodeString/String müsste ShareMem verwendet werden, oder eben als PChar übergeben.
Wenn keine #0
im PChar/PWideChar oder PAnsiChar vorkommen, dann braucht man keine Länge einzeln zu übergeben.
StrLen
Für WideString geht es geht es auch direkt, da es nicht den DelphiMM benutzt, sondern den MemoryManager vom OLE32
und intern ist es eigentlich ein
BSTR, wofür automatisch die
API um
SysAllocString/SysFreeString verwendet wird, welche auch C++ und Co. nutzen können.
Außerdem nutzt es somit auch eine Art von ShareMem (nur halt nicht das vom Delphi), weswegen es keine Probleme mit DLLs und
COM-Interfaces gibt.