Was du wohl eigentlich sagen wolltest:
Zitat:
array of const
ist nicht gleich TArray<TVarRec>
.
Und ja, da hast du natürlich recht. Zumindest so teilweise.
Nur habe ich deshalb nicht Unrecht. Schauen wir es uns etwas genauer an:
Ein
array of const
wird vom Compiler wie ein statisches Array behandelt, obwohl es intern ein PVarRec ist. Deshalb brauchen wir einen
@
-Operator vor dem array (welchen ich gestern nicht geschrieben habe, weil ich gerade keinen Bock hatte, den Code zu testen und so nicht gemerkt habe, dass er eben nur fast richtig ist).
Somit wird folgende Funktion eben funktionieren:
Delphi-Quellcode:
function ArrayOfConstToArrayOfTVarRec(a: array of const): TArray<TVarRec>;
begin
Pointer(Result) := Pointer(@a);
end;
etwas typsicherer wäre es dann aber doch, nicht beides nach
Pointer
zu casten, sondern das Rechte nach
TArray<TVarRec>
. Dann sieht das ganze so aus:
Delphi-Quellcode:
function ArrayOfConstToArrayOfTVarRec(a: array of const): TArray<TVarRec>;
begin
Result := TArray<TVarRec>(@a);
end;
Kannst du ja gern testen, wenn du es mir nicht glaubst. Aber es funktioniert.
Showmessage(String(ArrayOfConstToArrayOfTVarRec(['hello'])[0].VUnicodeString)); // Zeigt "hello"