2011-10-15 17 views
6

No he podido encontrar ninguna explicación sobre TVarData en x64. Hay una página en la Ayuda, pero parece que TVarData en x64 y TVarData en x86 son diferentes. En realidad, estoy tratando de compilar DEHL para el objetivo x64. Pero dice "encasillado válido" en esta línea: (Fuente es TVarData)Diferencias de TVarData entre x86 y x64 Delphi

Big := TBigCardinalVarData(Source).BigCardinalPtr^; 

Y TBigCardinalVarData está aquí:

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

Se compila en x86, pero se niega a compilar en x64. Creo que el problema está en las variables de Word y LongWord. Pero no pude entenderlo todavía.

Respuesta

12

El problema es la declaración packed record, el Tipo de registro empaquetado se convierte en Tipo de registro en X64, por lo que debe eliminar el "empaquetado" del "registro empaquetado" en la declaración y utilizar la Directiva ALIGN.

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

para más información leer estas entradas

+0

perfecto, gracias. :) – oruchreis

+0

He cambiado así '{$ IFDEF CPUX64} {$ ALIGN 8} {$ ENDIF} TBigIntegerVarData = {$ IFDEF CPUX86} empaquetó {$ ENDIF} registro' – oruchreis

Cuestiones relacionadas