Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.09.2013, 14:59
Lopator Lopator вне форума
Прохожий
 
Регистрация: 20.09.2013
Сообщения: 2
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию чтение из packed record

Доброго всем дня! Помогите с такой проблемой. Я сам новичок, дельфи изучаю совсем недолго. Понимаю что мой вопрос туп и лучшее что мне можно было бы ответить "почитай книжку". Согласен на 100%, читаю и учусь. Но так получилось, что немного забежал вперед и очень хочу сделать то, что не совсем понимаю. Поэтому прошу вашей помощи.

Есть структура в формате packed record:

Код:
TSharedMem = packed record     // обьявили структуру типа record
  version:word;
  flags :word;
  MemSize:integer;
  handle :THandle;
  NumTemps:word;
  NumFans :word;
  NumVolts:word;
  temps:array[0..31] of integer;
  fans :array[0..31] of integer;
  volts:array[0..31] of integer;
  end;

Создаю экземпляр типа:

Код:
SpeedFan:TSharedMem; 

Получаю указатель на shared memory откуда хочу читать значения:

Код:
HMapping := OpenFileMapping(FILE_MAP_READ, false, 'SFSharedMemory_ALM');
pSharedBuf := MapViewOfFile(HMapping, FILE_MAP_READ, 0, 0, 0); 

На этом месте затык. Я получил указатель pSharedBuf. Как мне получить доступ к структуре формата SpeedFan.volts ? Какой должен быть следущий шаг?

Заранее благодарю за подсказку, если кто поможет.
Ответить с цитированием
  #2  
Старый 20.09.2013, 18:03
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Почти всё есть, чуть-чуть добавить:
Код:
type
  PSharedMem = ^TSharedMem;

var
  SpeedFan: PSharedMem;
begin
  HMapping := OpenFileMapping(FILE_MAP_READ, False, 'SFSharedMemory_ALM');
  SpeedFan := MapViewOfFile(HMapping, FILE_MAP_READ, 0, 0, 0);
  ShowMessage(IntToStr(SpeedFan.Volts[0]));
end;
Ответить с цитированием
  #3  
Старый 20.09.2013, 23:06
Lopator Lopator вне форума
Прохожий
 
Регистрация: 20.09.2013
Сообщения: 2
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

Спасибо! Тоесть я обьявил SpeedFan как указатель на структуру определенного типа и обращаюсь к нему как к структуре? Круто!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:36.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025