|
Вопрос # 986/ вопрос открыт / |
|
Доброго времени суток , уважаемые эксперты!
Подскажите, пожалуйста, как можно решить следующую проблему: объявляю переменную, например tt, как TLargeInteger, пытаюсь сделать tt.QuadPart, а компилятор обругивается: требуется класс. Что за ...? Пробовал в программе использовать smport для доступа к LPT, так даже демонстрационный пример (TestLPT) не компилируется из-за этой ошибки
 |
Вопрос задал: Мережников Андрей (статус: Абитуриент)
Вопрос отправлен: 17 октября 2007, 22:08
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 19 октября 2007, 06:38; участников в обсуждении: 3.
|
Вадим К (статус: Академик), 18 октября 2007, 01:05 [#1]:
А разве TLargeInteger класс? если посмотреть в файл windows.pas, то там чётко написано TLargeInteger = Int64;
так что откудова у него вы нашли метод QuadPart - я не знаю.
Скачал я этот компонент, но там нигде об этом типе не упоминается. Что то вы не договариваете.
И ругаться не стоит, даже завуалировано.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Матвеев Игорь Владимирович (статус: Студент), 18 октября 2007, 11:56 [#2]:
type
LONGLONG = Int64;
{$EXTERNALSYM LONGLONG}
PSID = Pointer;
{$EXTERNALSYM PSID}
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;
QuadPart относится к типу LARGE_INTEGER - это собственно значение 64 битного целово, т.к. LARGE_INTEGER - тип-запись, может представлять его и как два 32 битных целых (LowPart и HighPart).
|
|
Мережников Андрей (статус: Абитуриент), 18 октября 2007, 17:39 [#3]:
Доброго времени суток, уважаемые эксперты! То, что Вы написали, это прекрасно, описание типов я тоже поднимал. Я поставил один из драйверов для работы с LPT-портом (кажется smPort), там есть обращение к переменной, которая объявляется как TLargeInteger. Используя LowPart, HighPart, QuadPart. Компилятор обругивается. я пробовал заменить тип переменной на LARGE_INTEGER - все равно не компилируется. Еще в DelphiWorld есть пример высокоточного таймера:
var
QW: TLargeInteger;
begin
inherited Create;
Exists := QueryPerformanceFrequency(QW);
ClockRate := QW.QuadPart;
end;
Естественно, он тоже не компилируется. Как вы объясните?
|
|
Вадим К (статус: Академик), 18 октября 2007, 17:57 [#4]:
QueryPerformanceFrequency требует параметр типа Int64, это раз
во вторых - в DelphiWorld есть ошибки и опечатки
в третих - многие совети приминимы только к конкретным версиям делфи. Этот совет применим наверно к первым версиям ещё. Но нет под рукой их - не могу проверить.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Матвеев Игорь Владимирович (статус: Студент), 19 октября 2007, 06:38 [#5]:
Просто оборачивайте переменную типекастингом там, где требуются составные части 64 битного целого:
// ...
var
QW: TLargeInteger;
begin
QueryPerformanceFrequency(QW);
ShowMessage(IntToStr(LARGE_INTEGER(QW).LowPart));
// ...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|