Die #0 fügt Delphi (AFAIK
) schon automatisch an verwaltete Strings an.
Wäre mir neu Würde ich mich, selbst wenn es so ist, aber auf keinen Fall drauf verlassen. "Normale" Strings sind in Delphi nicht nullterminiert, sondern enthalten ein vorangestelltes Längenbyte. Unter dem Gesichtspunkt ist für den Delphi Compiler ja keine Notwendigkeit gegeben noch irgendwelche Nullen hinzuzufügen.
Edit:
Zumindest bei neueren Delphi Versionen stehen auf den ersten Blick tatsächlich zwei Nullbytes hinter dem String.
Und statt @Source[1] lieber den passenden Cast nehmen
Macht keinen Unterschied:
Code:
Unit1.pas.63: RtlInitUnicodeString(@UnicodeString, @Source[1]);
005C7383 8B45F8 mov eax,[ebp-$08]
005C7386 E8252DE4FF call @WStrToPWChar
005C738B 50 push eax
005C738C 8D45F0 lea eax,[ebp-$10]
005C738F 50 push eax
005C7390 E8B7FFFFFF call RtlInitUnicodeString
Unit1.pas.64: RtlInitUnicodeString(@UnicodeString, PWideChar(Source));
005C7395 8B45F8 mov eax,[ebp-$08]
005C7398 E8132DE4FF call @WStrToPWChar
005C739D 50 push eax
005C739E 8D45F0 lea eax,[ebp-$10]
005C73A1 50 push eax
005C73A2 E8A5FFFFFF call RtlInitUnicodeString