Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Leerstring bei Interface

  Alt 28. Mai 2024, 17:29
Ehrlich gesagt, versteh ich nicht, warum '' oder sonstwo aus irgendwelchen typisierten oder untypisierten Konstanten/Variablen.
Selbst wenn es der falsche String-Typ ist, dann konvertiert Delphi das automatisch.

ACHTUNG: Variant vs. OleVariant

Im Variant können Delphi-Typen enthalten sein, wie z.B. AnsiString und String/UnicodeString,
womit fremde Sprachen natürlich nicht zurechtkommen, da sie das nicht kennen.

Der OleVariant ist ein OLE-kompatibler Variant, welcher ausschließlich Typen enthalten kann, welche OLE kennt, da sie dort definiert wurden.

Also entweder OleVariant verwenden,
oder ihr müsst eine typisierte Konstante benutzen (WideString oder OleVariant), mit dem passenden Typen, welchen OLE kennt.
const EmptyString: WideString = '';

[edit] war grad gedanklich bei einem anderen Probleme, was hier vor einer Weile im Forum war, auch mit einem OLE-Interface.






Auch zu beachten: Die SysUtils kennt ebenfalls ein Delphi-Referenz durchsuchenEmptyStr.
Und ich würde es als gefährlich einstufen diese Konstante zu benutzen.
  • erstmal kann der Kompiler nicht mehr optimieren (if S = 'then wird zu if Pointer(S) = nil then optimiert)
    und bei if S = EmptyStr then wird System._UStrEqual aufgerufen
  • dann sind typisierte Konstanten eigentlich nur schreibgeschützte Variablen (der Schreibschutz ist aber nicht wirklich vorhanden)
    im Delphi XE war dieser Bereich des Arbeitsspeichers nicht schreibgeschützt
  • und ich finde Code damit auch nicht wirklich schnell lesbar ... denke da immer an eine Variable, aber bei '' seh ich sofort das "LEER".

Code:
if S = '' then
004E63CB 837DF800         cmp dword ptr [ebp-$08],$00
004E63CF 7507             jnz $004e63d8

Unit1.pas.31: if S = EmptyStr then
004E63D8 8B45F8           mov eax,[ebp-$08]
004E63DB 8B15DC514F00     mov edx,[$004f51dc]
004E63E1 8B12             mov edx,[edx]
004E63E3 E8BC4DE3FF      call $0031b1a4
004E63E8 7507             jnz $004e63f1
Wir hatten z.B. mal den Spaß, dass diese Konstante ausversehn überschrieben wurde, mit dem Wert 'Empty' ,
und da DevExpress in seinem QuantumGrid überall diese Konstante verwendet, standen dann in allen leeren Zellen (mit NULL) plötzlich ÜBERALL "Empty" drin.
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. Mai 2024 um 17:49 Uhr)
  Mit Zitat antworten Zitat