Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 986

Раздел: Delphi » Прочее
/ вопрос открыт /

Доброго времени суток , уважаемые эксперты!
Подскажите, пожалуйста, как можно решить следующую проблему: объявляю переменную, например 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));
// ...

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:37
Выполнено за 0.03 сек.