Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2011, 16:45   #1
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию Подмена оконной процедуры, Как правильно завершить?

Добрый день.

У меня программа внедряет DLL в чужой процесс, а от туда DLL делает сабклассинг окну, таким образом:
Код:
WNDPROC pOldWndProc = (WNDPROC)SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)NewWndProc);
Все работает как надо, и когда я заканчиваю, я вызываю:
Код:
SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)pOldWndProc);
После чего сразу выгружаю DLL.

Проблема такая: иногда процесс вылетает, потому что пытается вызвать NewWndProc, а DLL уже выгружен.
Каким образом я могу подождать, пока все вызовы NewWndProc сделаются, чтоб только тогда выгрузить DLL?

P.S.
Я пробовал так:
Код:
static LRESULT CALLBACK NewTaskbarProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    wnd_proc_call_counter++;

    // ...

    wnd_proc_call_counter--;

    return result;
}
Код:
SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)pOldWndProc);

while(wnd_proc_call_counter > 0)
    Sleep(10);
Все равно иногда вылетает, да и не красиво получается...

Спасибо!
eduard93 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно завершить поток cosmic_call Общие вопросы Delphi 2 13.02.2011 05:32
Как завершить код? Kerragin Общие вопросы C/C++ 3 14.12.2010 20:23
Как правильно завершить поток Des Общие вопросы Delphi 5 08.05.2009 20:56
Как завершить программу по условию Iceman Общие вопросы Delphi 8 14.03.2009 00:46
Описание структур и массивов в оконной форме mdrake Общие вопросы C/C++ 2 15.05.2008 14:18