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
EmptyStr.
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.