Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
ВнизDelphi 7 + int64 Найти похожие ветки
← →
Стивенс (2002-10-18 09:52) [0]Поставил 7 дельфи и столкнулся с проблемой при установке компанента. В 6 версии все было ОК. Вот куски кода:
.....
type
.....
Capacity,
FreeSpace: Int64;
....
end;
....
{$IFDEF D4PLUS}
Capacity:=TC*SPC*BPS;
FreeSpace:=FC*SPC*BPS;
{$ELSE}
Capacity.QuadPart:=TC*SPC*BPS;
FreeSpace.QuadPart:=FC*SPC*BPS;
{$ENDIF}
....
Ругается на выделенные строки: [Error] comp_sys.pas(898): Record, object or class type required
В чем может быть дело? Спасибо.
← →
Anatoly Podgoretsky (2002-10-18 09:58) [1]У тебя есть тип Int64 типа record с полем QuadPart, ну или класс, объект?
← →
Ученик (2002-10-18 10:58) [2]Проверь определение D4PLUS, в Delphi 7 - VER150, Delphi 6 - VER140
← →
han_malign (2002-10-18 11:05) [3]Windows.pas - и в 6 и в 7 одинаковый
LONGLONG = Int64;
{$EXTERNALSYM LONGLONG}
PLargeInteger = ^TLargeInteger;
_LARGE_INTEGER = record
case Integer of
0: (
LowPart: DWORD;
HighPart: Longint);
1: (
QuadPart: LONGLONG);
end;
{$EXTERNALSYM _LARGE_INTEGER}
{$NODEFINE TLargeInteger}
TLargeInteger = Int64;
LARGE_INTEGER = _LARGE_INTEGER;
{$EXTERNALSYM LARGE_INTEGER}
ULARGE_INTEGER = record
case Integer of
0: (
LowPart: DWORD;
HighPart: DWORD);
1: (
QuadPart: LONGLONG);
end;
{$EXTERNALSYM ULARGE_INTEGER}
PULargeInteger = ^TULargeInteger;
TULargeInteger = ULARGE_INTEGER;
← →
han_malign (2002-10-18 11:11) [4]я так понимаю, что в 7 просто не определена директива D4PLUS
type
.....
{$IFDEF D4PLUS}
Capacity,
FreeSpace: Int64;
{$ELSE}//для совместимости с Delphi 2,3
Capacity,
FreeSpace: TLargeInteger;
{$ENDIF}
....
end;
....
{$IFDEF D4PLUS}
Capacity:=TC*SPC*BPS;
FreeSpace:=FC*SPC*BPS;
{$ELSE}//для совместимости с Delphi 2,3
Capacity.QuadPart:=TC*SPC*BPS;
FreeSpace.QuadPart:=FC*SPC*BPS;
{$ENDIF}
....
лечится добавлением {$DEFINE D4PLUS} или заменой D4PLUS на более актуальную для Delphi 7.
← →
Стивенс (2002-10-18 13:15) [5]Я просто убрал определение версии Дельфи и все заработало, но столкнулся с другой немного проблемой:
....
var
op0, op1: Int64;
....
begin
....
op1.LowPart:=op0.LowPart;
...
Ругается также. Ка кнадо описать или что добавить, чтоб он не приставал к переменным типа int64?
← →
han_malign (2002-10-18 13:40) [6]op0,op1: TLargeInteger;
или
op1:=(op1 and $FFFFFFFF00000000)or(op0 and $FFFFFFFF);
или
move(op0,op1,sizeof(DWORD));
Посмотри внимателтно мой самй первый ответ и разберись с типами, в конце концов.
З.Ы.На сколько я понял, в старых версиях Delphi, int64 был описан как сейчас TLargeInteger(только QuadPart был типа comp), теперь обработка 64-бит целого интегрирована в компилятор (тип comp хотя и является 64-бит целым, но считается как вещественный)
надо полагать было так:
int64 = record
case Integer of
0: (
LowPart: LongWord;
HighPart: Longint);
1: (
QuadPart: Comp);
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c