Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.182 Beiträge
 
Delphi 12 Athens
 
#12

AW: Delphi DLL String übergeben

  Alt 28. Mär 2024, 09:54
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.
MSDN-Library durchsuchenStrLen

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 Bei Google suchenBSTR, wofür automatisch die API um MSDN-Library durchsuchenSysAllocString/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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (28. Mär 2024 um 09:59 Uhr)
  Mit Zitat antworten Zitat