2011-10-15 12 views
6

Nie mogłem znaleźć żadnego wyjaśnienia na temat TVarData w x64. W Pomocy jest strona, ale wygląda na to, że TVarData w x64 i TVarData w x86 są różne. Właściwie to próbuję skompilować DEHL dla celu x64. Ale mówi "Nieprawidłowy typecast" na tej linii: (Źródło jest TVarData)TVarData Różnice między x86 i x64 Delphi

Big := TBigCardinalVarData(Source).BigCardinalPtr^; 

I TBigCardinalVarData jest tutaj:

TBigCardinalVarData = packed record 
    VType: TVarType; 
    Reserved1, Reserved2, Reserved3: Word; 
    BigCardinalPtr: PBigCardinal; 
    Reserved4: LongWord; 
end; 

To kompiluje w x86, ale ona odmawia kompilacji w x64. Myślę, że problem tkwi w zmiennych Word i LongWord. Ale nie mogłem tego jeszcze wymyślić.

Odpowiedz

12

Problemem jest deklaracja packed record The pakiety Typ rekordu staje Typ rekordu w X64, więc trzeba usunąć „packed” z „suchy zapis” w deklaracji, zamiast używać dyrektywę ALIGN.

{$ALIGN 8} 
TBigCardinalVarData = record 
    VType: TVarType; 
    Reserved1, Reserved2, Reserved3: Word; 
    BigCardinalPtr: PBigCardinal; 
    Reserved4: LongWord; 
end; 

uzyskać więcej informacji przeczytaj te wpisy

+0

doskonały, dzięki. :) – oruchreis

+0

Zmieniłem się w ten sposób '{$ IFDEF CPUX64} {$ ALIGN 8} {$ ENDIF} TBigIntegerVarData = {$ IFDEF CPUX86} spakowany rekord {$ ENDIF }' – oruchreis