
Требуется наиболее понимабильное объяснение.
Здравствуйте A L I E N, Вы писали:
ALIEN>
Требуется наиболее понимабильное объяснение.
Нandle — это просто число, однозначно идентифицирующее некоторый объект в системе. Когда система создает объект: мьютекс, окно и т.д., тебе возвращается его handle. Поскольку у тебя нет прямого указателя на данные объекта, то ты не можешь там ничего испортить, а вынужден работать с объектом используя специально предоставленные для этого функции.
Здравствуйте Alex Fedotov, Вы писали:
AF>Здравствуйте A L I E N, Вы писали:
ALIEN>>
Требуется наиболее понимабильное объяснение.
AF>Нandle — это просто число, однозначно идентифицирующее некоторый объект в системе. Когда система создает объект: мьютекс, окно и т.д., тебе возвращается его handle. Поскольку у тебя нет прямого указателя на данные объекта, то ты не можешь там ничего испортить, а вынужден работать с объектом используя специально предоставленные для этого функции.
К сказанному можно привести пример использования "хендлов" в своих программах:
выставляем наружу свой API:
HANDLE CreateMyObject(void);
BOOL SetMyObjectParam(HANDLE, int param_id, int value);
void CloseMyObject(HANDLE);
--реализация
HANDLE CreateMyObject(void)
{
return (HANDLE)new CMyObject;
}
BOOL SetMyObjectParam(HANDLE h, int param_id, int value)
{
CMyObject *p=(CMyObject*)h;
return p->SetParam(param_id, value);
}
void CloseMyObject(HANDLE)
{
CMyObject *p=(CMyObject*)h;
delete p;
}
В этом случае библиотекой могут пользоваться не только программисты C++, но и других (даже не объектноориентированных) языков, например C, Basic, Pascal, Fortran,... Отчасти "хендл"+АПИ можно назвать адаптерами объектно-ориентированного мира к не объектно-ориентированному (не совсем так, но можно так думать

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