Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.28;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
14-92666
Desdechado
2002-10-07 13:18
2002.10.28
Ассоциации


1-92584
maxim2
2002-10-17 06:35
2002.10.28
Про формы


3-92375
PAVELsinicinV
2002-09-29 20:27
2002.10.28
Добавить ещё один столбец в существующую таблицу ...


14-92690
DVD
2002-10-08 03:13
2002.10.28
нужен activation number!


1-92603
EugeneK
2002-10-17 11:34
2002.10.28
Поиск файла