![]() |
Создание окна в DLL и его последующее уничтожение... (VC++)
Всем приветы... ;)
Проблемка следующая: При загрузке DLL (DLL_PROCESS_ATTACH) создаю окошко, предварительно проинициализировав данные окна и зарегистрировав его... А вот как при выгрузке DLL (DLL_PROCESS_DETACH) корректно уничтожить энто окно?? Шо сделал - Первое что пришло на ум, если есть CreateWindow, то имеется и DestroyWindow... что было правдой :) И здесь возникли вопросы - DestroyWindow - The function sends WM_DESTROY... (MSDN) Но у меня нет цикла обработки сообщений, хотя присутствует WndProc, которая выполняет след. код : switch(msg) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, msg, wParam, lParam); } // switch И здесь интересная ситуация с PostQuitMessage The PostQuitMessage function indicates to the system that a thread has made a request to terminate (quit). ... А что здесь понимать под thread?... PostQuitMessage вставляет сообщение в очередь сообщений для приложения(thread?)... НО, в ходе дальнейших раскопок MSDN обнаружил, что DLL не имеют очередь сообщений ;)) [/I] However, if the intent is to have the DLL own the message queue, this is not possible. The reason is that DLLs, being taskless entities, are designed to be resources or to only provide resources and functions; they are not capable of handling the message processing. This functionality must be implemented in an application. [/I] Здесь я окончательно запутался... :( Так можно ли создавать в DLL окна, если можно, то как их потом уничтожать ??? (или не уничтожать :)) ) Все эти вопросы возникли после попытки выгрузить DLL, после чего приложение плевалось плохими словами, типа ACCESS VIOLATION ... блям, блям... P.S. Ах да, созданную в VC++ DLL-ку загружал в приложении на Delphi... |
Окна можно создавать в DLL. Пример тому все стандартные диалоги - открытия файла, print-диалог, диалог выбора директории и т. п. А делаеться это примерно так : Создал окно, запомнил его handle, если окно перестало быть нужным -заслал ему WM_CLOSE, и почистил память если было динамическое выделение.
|
| Часовой пояс GMT +4, время: 16:19. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.