Подтвердить что ты не робот

Что такое "ручка"?

Возможные дубликаты:
Что такое дескриптор Windows?
Что такое "дескриптор" ?

Я вижу ссылки на дескрипторы окон, элементы управления, которые имеют ссылку на дескриптор окна и т.д. Но я не знаю, что такое дескриптор.

Мне особенно хотелось бы знать, что это такое, и любые релевантные детали, поскольку он относится к .NET.

4b9b3361

Ответ 1

Ручка - это ссылка для операционной системы. Он не имеет семантики ссылки на программирование, но то, что он делает, позволяет системным ресурсам знать, что вы имеете в виду, когда оно передается в вызове API.

Обычно HANDLE завершается в экземпляр класса. CWnd - хороший пример, он содержит HWND, который является дескриптором окна.

Вы можете это сделать. CWnd * pWnd = CWnd:: FromHandle (hWnd) Примечание: CWnd:: FromHandle (hWnd) является статическим и не требует экземпляра.

Он вернет вам обертку, в которую обернут hWnd. Ну не совсем! Если дескриптор на самом деле не обернут объектом, он создаст один, И ЭТО БУДЕТ ТОЛЬКО ВРЕМЕННО. Так используйте его один раз, а затем выбросьте его. Он может создать экземпляр, поскольку hWnd имеет достаточно информации в своей структуре для окон, чтобы создать экземпляр объекта CWnd. Он не добавляет его в таблицу элементов управления v, поэтому он является временным.

HWND на самом деле является объектом ядра и больше? HWND (CWnd и CWnd-производные классы) HDC (классы CDC и CDC) HMENU (CMenu) HPEN (CGdiObject) HBRUSH (CGdiObject) HFONT (CGdiObject) HBITMAP (CGdiObject) HPALETTE (CGdiObject) HRGN (CGdiObject) HIMAGELIST (CImageList) SOCKET (CSocket) (должен был быть HSOCKET?) + Другие. Я не уверен, что все они возвратят временный объект, если потребуется. GetDC (hWnd) доставит вам hDC из hWnd, но он будет временным, возможно, лучше использовать CDC claa.

Подробнее: http://wiki.answers.com/Q/What_is_a_handle_in_Windows_Programming#ixzz1JBmoF0lv

Ответ 2

Дескриптор представляет собой абстрактную ссылку на какой-либо ресурс, предоставленный вам другой стороной (как правило, ОС), которую вы можете вернуть для ссылки на этот ресурс.

ОС часто содержат таблицу дескрипторов, содержащую объекты, созданные пользователями (открытые файлы,...); дескриптор представляет собой целочисленный индекс в эту таблицу. Ваш процесс делает открытым, ОС создает запись в своей таблице дескрипторов, маркирует ее своим именем (процессом) и передает индекс этой записи обратно в ваш процесс. Когда ваш процесс хочет выполнить чтение, он предоставляет целое число дескрипторов для ОС, которое просматривается в таблице, просто используя его в качестве индекса таблицы; теперь он знает, какой объект (файл) хочет обработать ваш процесс.

Поместив свой идентификатор процесса в запись дескриптора, ОС может определить, действителен ли дескриптор для процесса. Ваш процесс может предоставить мусор в качестве дескриптора ОС; если слот ручки совпадает, ОС будет делать то, что вы хотите, независимо от того, насколько это глупо. В конце концов, это ваш ресурс.

Ответ 3

Handle - это то, что уникально идентифицирует объект ОС, будь то сокет, примитив синхронизации и т.д. (в Unix их обычно называют дескрипторами). Технически это либо смещение в глобальной таблице объектов, либо указатель на запись, содержащий информацию об объекте. Но вам нужно рассматривать этот дескриптор как непрозрачный номер.

.NET использует ссылки на объекты, поэтому в .NET вы сталкиваетесь с ручками, когда речь идет о взаимодействии с ОС.