Einzelnen Beitrag anzeigen

Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
485 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Array of String als Konstante klappt nicht...

  Alt 6. Dez 2019, 12:28
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"
Dennis
  Mit Zitat antworten Zitat