Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2012, 01:06   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Восклицание 2 типа из C++ в delphi

Доброго времени!

2 описания типов просто вбили в ступор.
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Код:
typedef union _PSAPI_WORKING_SET_BLOCK {
  ULONG_PTR Flags;
  struct {
    ULONG_PTR Protection  :5;
    ULONG_PTR ShareCount  :3;
    ULONG_PTR Shared  :1;
    ULONG_PTR Reserved  :3;
    ULONG_PTR VirtualPage  :20;
  };
} PSAPI_WORKING_SET_BLOCK, *PPSAPI_WORKING_SET_BLOCK;
и второй: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Код:
typedef union _PSAPI_WORKING_SET_EX_BLOCK {
  ULONG_PTR Flags;
  struct {
    ULONG_PTR Valid  :1;
    ULONG_PTR ShareCount  :3;
    ULONG_PTR Win32Protection  :11;
    ULONG_PTR Shared  :1;
    ULONG_PTR Node  :6;
    ULONG_PTR Locked  :1;
    ULONG_PTR LargePage  :1;
    ULONG_PTR Reserved  :7;
    ULONG_PTR Bad  :1;
#if defined(_WIN64)
    ULONG_PTR ReservedUlong  :32;
#endif 
  };
  struct {
    ULONG_PTR Valid  :1;
    ULONG_PTR Reserved0  :14;
    ULONG_PTR Shared  :1;
    ULONG_PTR Reserved1  :15;
    ULONG_PTR Bad  :1;
#if defined(_WIN64)
    ULONG_PTR ReservedUlong  :32;
#endif 
  } Invalid;
} PSAPI_WORKING_SET_EX_BLOCK, *PPSAPI_WORKING_SET_EX_BLOCK;
Как их толком представить в delphi?
Всю голову уже сломал.

Спасибо за внимание.
Человек_Борща вне форума Ответить с цитированием
Старый 22.06.2012, 01:29   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

я бы особо не заморачивался, а просто обе структуры воспринимал бы как 4 байта флагов (8 байт для х64), с которыми надо работать побитово, вот и всё. Как пример, получили мы значение _PSAPI_WORKING_SET_EX_BLOCK, берем младший бит первого байта, это будет поле Valid. Если там 1, значит далее идут 3 бита ShareCount, иначе 14 бит на Reserved0 и далее по списку:

Код:
type
  _PSAPI_WORKING_SET_EX_BLOCK = ULONG_PTR;

var
  s: _PSAPI_WORKING_SET_EX_BLOCK;

begin
  .....
  // получили s и работаем с ним:
  if (1 = (s and 1)) then
    ShareCount := (s shr 1) and 7
  else
    Shared := (s shr 15) and 1;
в таком духе.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.06.2012, 01:38   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Не особый вариант. Мб другие ппредложения есть?
Человек_Борща вне форума Ответить с цитированием
Старый 22.06.2012, 01:40   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
я бы особо не заморачивался
а там и не заморочишься, ибо в Делфи не припомню работы с битовыми полями.
Цитата:
Мб другие ппредложения есть?
класс обертка.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.06.2012, 01:51   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Не особый вариант
собственно, как верно отметил Пепел, других нет
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.06.2012, 15:27   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

пойду копать C++ и битовые поля.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стратегия на delphi типа героев invizor Gamedev - cоздание игр: Unity, OpenGL, DirectX 27 11.04.2016 12:03
перевод типа из Delphi в C++ Karina89 Помощь студентам 4 09.11.2011 21:13
Массив типа tpoint(delphi) Человек Панда Помощь студентам 2 09.02.2011 17:47
[Delphi] Массив типа char Рамик Помощь студентам 1 20.09.2010 18:20
Файл типа TLabel (Delphi) edmynt Помощь студентам 12 12.02.2010 12:48