Ah danke, jetzt habe sogar ich das verstanden. Und ja, unter 10.4 Sydney sieht es nun anders aus:
Delphi-Quellcode:
function _LStrToPChar(const S: _AnsiStr): _PAnsiChr;
begin
if Pointer(s) = nil then
Result := @(PEmptyString(Pointer(EmptyStringA))^.Nul)
else
Result := Pointer(s);
end;
Vorher (laut dir):
Delphi-Quellcode:
function _LStrToPChar(const S: _AnsiStr): _PAnsiChr;
begin
if Pointer(s) = nil then
Result := @(PEmptyString(@EmptyStringA[1])^.Nul)
else
Result := Pointer(s);
end;
Aus
@EmptyStringA[1]
wurde
Pointer(EmptyStringA)
. Vielen Dank. Ich konnte nichts finden weshalb das geändert worden ist. Außerdem spielen leere Strings hier ja keine Rolle. Wahrscheinlich hat sich noch mehr geändert.
PS: Unter 64 Bit funktioniert alles weiterhin wie gehabt. Wahrscheinlich steckt irgendwo ein Fehler in diesem mystischen Assemblercode.
PPS: Ich habe mal einen neuen Eintrag angelegt unter
https://quality.embarcadero.com/browse/RSP-29567