Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

Persey

Что такое Handle

Рекомендуемые сообщения

Объясните что такое HANDLE :unsure:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уникальный идентификатор. Обычно цифирки, идентифицирующие практически любой элемент для доступа к нему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Этот термин наиболее широко прижился в Windows API. Обозначает идентификатор выделенного системой ресурса. Например, открыли некий файл - получили хэндл открытого файла, загрузили DLL - получили хэндл, с помощью которого можно выполнять некие действие с DLL. Аналогичные объекты существуют и в API других ОС, например в Linux. Сам по себе хэндл (физически) - _обычно_ целое число, являющееся индексом или указателем на системные объекты ОС. Хэндл выполняет роль идентификатора системного объекта и передается в качестве аргумента при вызове функций API, выполняющих действия над системным объектом. Существуют также функции, создающие новые системные объекты, например CreateFile в Windows API или socket() в Linux. Такие функции возвращают хэндл в качестве результата своей работы или специальное оговоренное в документации значение, если вызов функции по какой-либо причине не был удачно выполнен ОС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а могу я принудительно создать хендл? :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
а могу я принудительно создать хендл?  :rolleyes:

" молодец, задавай глупые вопросы - получай умные ответы " (с) КВН

 

eg: HWND wnd = CreateWindowEx(...);

wnd - "твой" принудительно созданный хендл :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Persey

А что значит - принудительно создать? И собственно к чему этот хендл должен относиться???

Вообще-то он обычно автоматически создается при выполнении каких-то действий. Если ты имеешь в виду создание переменной типа хэндл - то можно. А потом этой переменной можно значения присваивать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
а могу я принудительно создать хендл? 

eg: HWND wnd = CreateWindowEx(...);

wnd - "твой" принудительно созданный хендл

В данном случае, как и во всех остальных в принципе, создается ресурс, а не хэндл. А возвращается его хэндл... Одним словом - нажал кнопку - получил банан. Создал что-либо - получил хэндл...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Persey

С точки зрения языка программирования (например, Си) хэндл - всего лишь один из типов данных (в большинстве случаев - целое число). Создавать его столь же банально, как и любой другой объект существующего типа. Но смысл значение хэндла имеет только в контексте выполняющихся в ОС процессов. Другими словами, хэндл со значением 123456 будет воспринят с очень большой вероятностью как ошибочный и его использование в функциях API ничего полезного не даст. Однако, искренне советую поиграться с этими штучками :) Если уж стало интересно, так иди до конца. Пример "принудительно создаваемого" хэндла написал выше тов. HeToC

 

Аналогию хэндла очень нетрудно найти в реальной жизни. Например, сидишь ты в туалете, сделал дело, а рядом, слева или позади - хэндл, связанный с ресурсом "сливной бачек". Дернул за хэндл, сработал таинственный механизм и истинный материальный продукт твоей деятельности унесся в бесконечность... Понятно, что ты можешь создать на пустом месте хэндл, но вовсе не обязательно, что он будет столь же полезен, как хэндл сливного бачка. Сам по себе хэндл ничего не может сделать полезного, но "правильный" хэндл является путеводной нитью к заветным действиям. Более того, к одному бачку можно приделать много хэндлов, но все они будут связаны с одним и тем же ресурсом. От того, что слева будет висеть не одна, а две веревочки, производительность бачка, к сожалению, не увеличится. Так и в ОС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Давайте абстрагируемся от унитазов и ресурсов.

 

Указатель на объект - и есть Хендл ;)

 

А вот пример жизненный:

char* lpszTmp="This Is Amazing String\0"; //lpszTmp - и есть хендл для строки

char* testHandle2 = lpszTmp+5; //это тоже хендл :)

 

Сказочка про Handle.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты