0 / 0 / 0
Регистрация: 11.12.2008
Сообщений: 6
1

DECLARE_HANDLE (HWND);

25.12.2008, 11:36. Показов 7046. Ответов 3
Метки нет (Все метки)

Почему так странно объявлен тип HWND?
Может кто прокомментировать эти строки:
Код
//winnt.h
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
//windef.h
DECLARE_HANDLE (HWND);
Что бы изменилось, если бы было так: typedef unsigned long HWND;
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2008, 11:36
Ответы с готовыми решениями:

Для чего служит первый параметр (HWND hWnd) в функции WndProc?
// функция обработки сообщений LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM...

Окно на WinAPI, параметр функции WndProc (HWND hWnd,.)
Пытаюсь понять какое значение хранит первый параметр HWND hWnd в функции WndProc. В Windows в...

Почему переменная HWND hwnd объявлена дважды?
Один раз в функции WinMain: int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,...

Найти HWND окна, зная HWND окна, породившего его
Здравствуйте! Имеется основное окно "А". Это окно создаёт новое недочернее окно "Б". Необходимо...

3
Эксперт С++
2921 / 1270 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
25.12.2008, 12:24 2
А потому, что никто и нигде не гарантирует, что размер HWND будет таким, что "уложится" в unsigned long. Это справедливо вообще для любого хэндла.
0
0 / 0 / 0
Регистрация: 11.12.2008
Сообщений: 6
25.12.2008, 19:14  [ТС] 3
Код
struct HWND__
{
    int unused;
};
Как структура с единственным членом int, может это гарантировать?

sizeof(HWND__) == sizeof(int)

Позже:
Да, до меня дошло.
0
svvlad
09.01.2014, 16:53 4
Лучший ответ Сообщение было отмечено как решение

Решение

Эта строка при определенной опции STRICT разворачивается в

C++
1
2
struct HWND__ {int unused;};
typedef struct HWND__ *HWND
То есть HWND есть указатель на структуру HWND__. Если же опция STRICT не определена, то HWND везде заменяется на HANDLE.

Идентификатор STRICT указывает на необходимость проводить более строгую проверку типов. Как вы уже убедились, без этой опции все HWND, а также описатели других объектов Windows - HPEN, HBITMAP, HFONT, HMENU, HDC и др. будут фактически представлять собой один тип - HANDLE. Если же вы включите определение STRICT, тогда они будут трактоваться как разные типы (благодаря макросу DECLARE_HANDLE), и при их несоответствии компилятор будет выдавать сообщение об ошибке. Использование STRICT рекомендуется для того, чтобы было легче находить возможные ошибки в программе.

http://www.codenet.ru/progr/bcb/Handle-Types.php
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2014, 16:53

Помощь в написании контрольных, курсовых и дипломных работ здесь.

IN HWND hWnd
Здравствуйте. Каково назначение IN в объявлении IN HWND hWnd? В чём разница между HWND hWnd и IN...

HWND
Доброго времени суток, извините за такой тупой вопрос, но.... объявляю функцию void draw(HWND...

Найти HWND
Господа вопрос такой - делаю "универсальную" dll для внедрение в приложение , но вот проблема т.к....

робота с HWND
всем привет! допустим, у меня есть некий дескриптор и мне нужно записать его значение в файл, с...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.