TVarData Различия между x86 и x64 Delphi - PullRequest
6 голосов
/ 15 октября 2011

Я не смог найти никакого объяснения о TVarData в x64.В справке есть страница, но кажется, что TVarData в x64 и TVarData в x86 отличаются.На самом деле я пытаюсь скомпилировать DEHL для цели x64.Но в этой строке написано «Invalid typecast»: (Источник TVarData)

Big := TBigCardinalVarData(Source).BigCardinalPtr^;

И TBigCardinalVarData здесь:

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

Он компилируется в x86, но отказывается компилироваться вx64.Я думаю, что проблема в переменных Word и LongWord.Но я пока не могу этого понять.

1 Ответ

12 голосов
/ 15 октября 2011

Проблема в объявлении packed record, тип упакованной записи становится типом записи в X64, поэтому вы должны удалить «упакованную» из «упакованной записи» в объявлении и вместо этого использовать ALIGN Директива.

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

для получения дополнительной информации прочитайте эти записи

...