Як побороти помилку - 1400 неприпустимий дескриптор вікна

Як побороти помилку "1400: Неприпустимий дескриптор вікна"?

Створюю потік, в якому потрібно буде відловлювати деякі повідомлення. Тому в конструкторі створюю віконечко:

# XA0; m_hook_window: = TWinControl.Create (nil);
# XA0; m_hook_window.Visible: = false;
# XA0; m_hook_window.Left: = - 1;
# XA0; m_hook_window.Top: = - 1;
# XA0; m_hook_window.Width: = 1;
# XA0; m_hook_window.Height: = 1;
# XA0; m_hook_window.ParentWindow: = Application.Handle;

Ну і міняю його обробник на свій.

Все відмінно працює.

Зупиняю потік з програми і викликаю Destroy, # XA0; а на рядку
# XA0; m_hook_window.Free;

Видає помилку EOSerror: "System Error. Code 1400: Неприпустимий дескриптор вікна". Як побороти?

> Створюю потік, в якому потрібно буде відловлювати деякі
> Повідомлення. Тому в конструкторі створюю віконечко:

В общем-то, потік може обробляти (деякі) повідомлення
і без вікна.

> Ну і міняю його обробник на свій.
> Все відмінно працює.

> Зупиняю потік з програми і викликаю Destroy, # XA0; а на
> рядку
> # XA0; m_hook_window.Free;

Оне діяння досить сумнівно.

А додаток win32?

По-моєму AllocateHWND НЕ являтся потокобезпечна.

2 Leonid Troyanovsky: спасибі. Так запрацювало без винятків.

Ну щоб щось привласнити m_hook_window.ParentWindow. А що ще можна привласнити?

> # XA0; m_hook_window.Free;
> Оное діяння досить сумнівно.

P.S. Додаток Win32.

А чому мій первісний варіант був поганий? Адже до цього m_hook_window звертався тільки один потік?

Чому тут страждає "потокобезопсаность"? Через наявність Application.processmessages в потоці?

>> # XA0; m_hook_window.ParentWindow: = Application.Handle;
>> Навіщо?

> Ну щоб щось привласнити m_hook_window.ParentWindow. А
> Що ще можна привласнити?

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

>> # XA0; m_hook_window.Free;
>> Оное діяння досить сумнівно.

Якщо з самого початку, то й саме створення вікна сумнівно,
бо якщо воно створюється в конструкторі, то це не вікно
створюваного потоку.
Ну, і з руйнуванням не все гладко, бо контроли включаються
в масив Controls and so on. Плюс послідовність -
при завершенні потоку вікна вже немає (вікно - власність потоку).

> 2 Набережних С. ​​так можна мені використовувати AllocateHWND?
> Може якісь доп. заходи прийняти для збільшення

Пам'ять: 0.74 MB
Час: 0.085 c