AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String im record nach DLL

Ein Thema von Edelfix · begonnen am 18. Jun 2019 · letzter Beitrag vom 18. Jun 2019
 
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.687 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: String im record nach DLL

  Alt 18. Jun 2019, 08:55
Ein string ist ein Referenz-Typ. Im record steht also nur ein Referenz-Zeiger und der bringt dir in diesem Fall nichts.
Das stimmt so nicht: Dieser Zeiger ist innerhalb der DLL immernoch gültig und zeigt auf den String-Descriptor (oder ist NIL, für einen leeren String).

Problematisch wird es erst, wenn man in der DLL darauf zugreift, denn dann kommt das Reference-Counting und die Speicherverwaltung ins Spiel und es wird hakelig. Aber auch hier sollte es noch nicht problematisch sein, lesend auf den String zuzugreifen und mittels UniqueString eine nur für die DLL zu verwendende Kopie zu erzeugen.

Solange auf beiden Seiten dieselbe Delphi-Version im Einsatz ist, kann man mit ShareMem arbeiten und diese Probleme verschwinden. Bei unterschiedlichen Delphi-Versionen wird es komplizierter, da nicht alle Sharemem-Implementationen kompatibel sind. Seit Delphi 2007 wird aber FastMM verwendet, d.h. bis dahin sollte auch das kein Problem sein.

Ab Delphi 2009 ist String ein UnicodeString, darauf muss man achten, wenn unterschiedliche Delphi-Versionen im Einsatz hat. Am Besten verwendet man einen eindeutigen Stringtyp: AnsiString oder UnicodeString statt String, damit das klar definiert ist.

Ist man nicht sicher, dass auf beiden Seiten immer Delphi zum Einsatz kommt, sollte man auf die Übergabe von Strings verzichten sondern lieber PChar / PAnsiChar / PWideChar oder den von hoika erwähnten WideString verwenden (welcher allerdings vergleichsweise langsam ist).
Thomas Mueller
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz