TVarData Различия между x86 и x64 Delphi

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

Big := TBigCardinalVarData(Source).BigCardinalPtr^;

И TBigCardinalVarData находится здесь:

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

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

delphi,dehl,

6

Ответов: 1


12 принят

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

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

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

дельфи, дель,
Похожие вопросы