Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375

Различные хэндлы

05.04.2018, 18:04. Показов 921. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как известно все хэндлы, которые используются в win api есть не что иное как указатели на void.
Почему же несмотря на это иногда требуется приведение одного хэндла к другому?
Например при заполнении структуры оконного класса встречается такая инструкция:

C++
1
wcex.hbrBackground = static_cast<HBRUSH>(GetStockObject(LTGRAY_BRUSH));
ну или такая:

C++
1
wcex.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
Ведь если и тот и другой хэндл есть void *, то вроде по всем канонам C++ явное преобразование вообщем то не нужно.

Тем не менее, вот такая инструкция уже не работает:

C++
1
wcex.hbrBackground = GetStockObject(LTGRAY_BRUSH);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.04.2018, 18:04
Ответы с готовыми решениями:

Хэндлы hProcess и hThread
Объясните, пожалуйста, для чего в программе используются хэндлы процесса и потока (hProcess, hThread) ?Для чистки буфера? #include...

Как получить хэндлы системного процесса?
Добрый день. Пытаюсь получить handle какого-нибудь системного процесса. Нашел в инете пример, который выставляет своему процессу привилегию...

Хэндлы у Fire Monkey
Ребяты!... Хелп ми sos!.. Нужно узнать позицию прокрутки в ListBox, нашёл способ через Хэндл компонента, но как получить этот самый...

4
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
06.04.2018, 11:24
Цитата Сообщение от Просто Саша Посмотреть сообщение
Как известно все хэндлы, которые используются в win api есть не что иное как указатели на void.
это с чего вы так решили?

это
C++
1
2
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
DECLARE_HANDLE (HWND);
тоже по вашему void?
0
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
06.04.2018, 16:11  [ТС]
Цитата Сообщение от _lunar_ Посмотреть сообщение
это с чего вы так решили?
А можно не вопросом.
Если знаете, то ответьте более конкретно и понятно.
Из Вашего ответа пока ничего не понятно.

Добавлено через 2 часа 52 минуты
Понятно, ответить слабо.
Но кое что я понял.
На самом деле хэндлы - это указатели на некие структуры, определенный в win api.
Их единственное назначение быть переданными тем или иным системным функциям.
Через хэндлы нельзя получать доступ к полям структуры, на которые они указывают.
Одним словом, это даже не совсем указатели, а скорее некая единообразная форма представления того, что имеется в программе.
Конечно, возникает масса вопросов по тому как одни из них пребразовываются в другие, и тем более иногда допускается преобразование целых значений в хэндлы, как например:

C++
1
wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
Совершенно непонятно, как целое число преобразовывается в некое подобие указателя.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
07.04.2018, 12:45
Цитата Сообщение от Просто Саша Посмотреть сообщение
Понятно, ответить слабо.
с такими комментариями вам никто отвечать не будет.
а мысль, о том, что я всё это время не заходил на форум вам в голову приходила?
или я что тут должен сидеть днями и ночам и мониторить ваши вопросы?

Цитата Сообщение от Просто Саша Посмотреть сообщение
На самом деле хэндлы - это указатели на некие структуры, определенный в win api.
WinAPI здесь не причём.
если утрировать WinAPI это обертка над NativeAPI, которая в свою очередь обертка над системными вызовами.
по сути все системные вызовы это сервисные таблицы, а хендлы это не указатели, а индексы в этих таблицах.
хендл может быть как адресом на структуру или объект ядра, так и чем-то другим (void в данном случае служит просто типом передачи данных).
0
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
07.04.2018, 13:15  [ТС]
Цитата Сообщение от _lunar_ Посмотреть сообщение
WinAPI здесь не причём.
если утрировать WinAPI это обертка над NativeAPI, которая в свою очередь обертка над системными вызовами.
по сути все системные вызовы это сервисные таблицы, а хендлы это не указатели, а индексы в этих таблицах.
хендл может быть как адресом на структуру или объект ядра, так и чем-то другим (void в данном случае служит просто типом передачи данных).
Ну хорошо допустим, что это так.
Но правила работы с этими штуками (как то, например, правила преобразования одних хэндлов к другим и тому подобное) должны же где-то быть, или Microsoft забила на это?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.04.2018, 13:15
Помогаю со студенческими работами здесь

Хэндлы или потоки в C++11
Здравствуйте. Помогите новичку выполнить данную задачку на C++11: 1. Написать программу, которая выполняет следующие действия по...

Delphi xe7 multi-device Form , хэндлы окон и работа с ними
Писал прогу для послания нажатий клавиш в неактивое окно в delphi xe4. По аналогии стал писать прогу в multi-device Form под тач в delphi...

Составить алгоритм решения ребуса РАДАР = (Р + А + Д)4 (различные буквы обозначают различные цифры, старшая — не 0).
27. Составить алгоритм решения ребуса РАДАР = (Р + А + Д)4 (различные буквы обозначают различные цифры, старшая — не 0).

Составить алгоритм решения ребуса РАДАР=(Р+А+Д)^4 (различные буквы означают различные цифры, старшая - не 0).
я знаю что на С++ это должно быть так... void main () { char g ; CharToOem (&quot;\nРешение ребуса РАДАР=(Р+А+Д)^4\n&quot;, g); ...

Составить три блочные цветовые схемы, используя различные цветовые стили дизайна и различные композиции
Составить три блочные цветовые схемы, используя различные цветовые стили дизайна и различные композиции web-страницы.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru