Kiedy skompilować następujący kod w Delphi XE2 dla platformy docelowej 64-bitowym systemie Windows ...Dlaczego otrzymuję komunikat "Stałe wyrażenie narusza zakresy podzakresów" dla stałych HKEY w Delphi XE2 64bit?
function HKeyToString(_HKey: HKey): string;
begin
case _HKey of
HKEY_CLASSES_ROOT: result := 'HKEY_CLASSES_ROOT'; // do not translate
HKEY_CURRENT_USER: result := 'HKEY_CURRENT_USER'; // do not translate
HKEY_LOCAL_MACHINE: result := 'HKEY_LOCAL_MACHINE'; // do not translate
HKEY_USERS: result := 'HKEY_USERS'; // do not translate
HKEY_PERFORMANCE_DATA: result := 'HKEY_PERFORMANCE_DATA'; // do not translate
HKEY_CURRENT_CONFIG: result := 'HKEY_CURRENT_CONFIG'; // do not translate
HKEY_DYN_DATA: result := 'HKEY_DYN_DATA'; // do not translate
else
Result := Format(_('unknown Registry Root Key %x'), [_HKey]);
end;
end;
... dostaję ostrzeżenia dla każdego z HKEY_-Stałe: „W1012 Stała ekspresja jest niezgodny podzakresu granice”
Sprawdziłem oświadczenia w Winapi.Windows (z Ctrl + Leftclick dotyczące identyfikatorów):
type
HKEY = type UINT_PTR;
{...}
const
HKEY_CLASSES_ROOT = HKEY(Integer($80000000));
te wyglądają dobrze na mnie. Dlaczego kompilator nadal uważa, że jest jakiś problem?
Brzmi prawdopodobne, więc rozwiązaniem byłoby użyć instrukcji zamiast? – dummzeuch
Wyciąg z doc ['# Case_Statements'] (http://docwiki.embarcadero.com/RADStudio/XE3/en/Declarations_and_Statements#Case_Statements):" .. gdzie selectorExpression to dowolne wyrażenie typu porządkowego mniejsze niż 32 bity (ciąg znaków typy i liczby porządkowe większe niż 32 bity są nieprawidłowe). " –
@LURD Nie będę pobierał dokumentacji XE3 w celu uzyskania dokładności, jeśli dotyczy ona 64-bitowego (a nawet CrossPlatform). Jest dość przestarzały w przypadku nowych celów i nie został odświeżony (nadal masz odniesienia do "Linuksa" i opisy specyficzne dla systemu Win32 - patrz [np. Ta strona] (http://docwiki.embarcadero.com/RADStudio/XE3/en/ Program_Control)). Ale w tym przypadku brzmi jak prawdziwe ograniczenie - nawet jeśli nie jest to obowiązkowe, z wygenerowanego punktu widzenia, ponieważ w 64-bitowym można użyć rejestrów x64 na zapleczu, aby sprawdzić "przypadek". Więc domyślam się, że nakładka kompilatora nie została zaktualizowana dla kontekstu 64-bitowego. –