Hallo Uwe,
ich habe deinen Code ausprobiert und bin dabei auf folgendes Problem bei der Rückwandlung des TOLEEnum in einen String gestoßen. Bei der Verwendung der Funktion GetasString wird die als TCountryCode gecastete Variable von CountryCode2 übergeben (CountryCode2_DE = 17477).
Delphi-Quellcode:
function TCountryCodeHelper.GetAsString: string;
begin
Result := TRttiEnumerationType.GetName<TCountryCode>(Self); --> liefert falsche Werte, da Self keinen Indexwert von TCountryCode darstellt
end;
Das funktioniert leider nicht (allerdings ohne Fehlermeldung bei der Ausführung), da der Wertebereich von TCountryCode überschritten wird. Gebe ich einen gültigen Indexwert von TCountryCode in die Funktion (CountryCode_DE = 15) erhalte ich das gewünschte Ergebnis.
Als Alternative hatte ich mir folgenden Code überlegt (ich habe die Variablen cOLEEnums umbenannt)
Delphi-Quellcode:
function TCountryCodeHelper.GetCountryAsString: string;
begin
Result := 'CountryCode_unk';
for var idx := Low(cCountryEnums) to High(cCountryEnums) do begin
if cCountryEnums[idx] = Cardinal(Self) then begin
Result := TRttiEnumerationType.GetName<TCountryCode>(idx);
break;
end;
end;
end;
Da Cardinal(Self) mit dem Wert 69 in der Funktion ankommt, ist eine Iteration mit Vergleich über cCountryEnums nicht möglich. Wie kann ich den ursprünglich übergebenen Wert 17477 der Funktion erhalten? Vielen Dank.
VG Michael
Michael H.