![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi 7 + int64
Стивенс © (2002-10-18 09:52:00)Поставил 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
В чем может быть дело? Спасибо.
han_malign (2002-10-18 13:40:00) [1]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;
Стивенс (2002-10-18 13:15:00) [2]Я просто убрал определение версии Дельфи и все заработало, но столкнулся с другой немного проблемой:
....
var
op0, op1: Int64;
....
begin
....
op1.LowPart:=op0.LowPart;
...
Ругается также. Ка кнадо описать или что добавить, чтоб он не приставал к переменным типа int64?
han_malign (2002-10-18 11:11:00) [3]я так понимаю, что в 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.
han_malign (2002-10-18 11:05:00) [4]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;
Ученик (2002-10-18 10:58:00) [5]Проверь определение D4PLUS, в Delphi 7 - VER150, Delphi 6 - VER140
Anatoly Podgoretsky (2002-10-18 09:58:00) [6]У тебя есть тип Int64 типа record с полем QuadPart, ну или класс, объект?