Здравствуйте! Возникла такая проблема: пишу библиотеку, которая должна немодально вызываться из определенного процесса. В ней есть окна. Иногда возникает ситуация, когда окно не появляется. Код (Text): DWORD MessageLoop(LPVOID lpParam) { MSG msg; HINSTANCE hInstance; hInstance=hDLL; //MessageBox(NULL,"MessageLoop","MessageLoop",MB_OK); Sleep(2000); if(!InitApplication(hInstance)) return FALSE; InitCommonControls(); if (!InitInstance(hInstance, 1)) return FALSE; ShowWindow(hWnd,SW_MINIMIZE); UpdateWindow(hWnd); ShowWindow(hWnd,SW_HIDE); while(GetMessage( &msg, NULL, 0x00, 0x00)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } ... DWORD ThreadId; ... hThread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MessageLoop, NULL, 0, &ThreadId); Если выводить сообщение (убрать комментарий), то всегда вызывается правильно, если же нет MessageBox - иногда не рисуется окно (оно в трей должно свернуться). Кто знает как это можно вылечить и в чем причина такого поведения. Заранее благодарен.
gilg Нет. Она из экспортируемой функции вызывается. А та, в свою очередь, запускает это все на исполнение.
А не может это случаться банально из-за того, что MessageBox дополнительную задержку обеспечивает? Судя по Sleep, твоя длл ждет чего-то от основного приложения...
gilg Нет, Sleep здесь - это как раз проверка предположения о задержке. Я тоже так подумал - ничего не изменилось. Просто забыл Sleep убрать. Он никак не влияет на происходящее.
Сейчас попробовал использовать вместо MessageBox вот это Код (Text): DialogBox(hInstance, MAKEINTRESOURCE(IDD_DLG), GetForegroundWindow(), DlgProc); А в процедуре инициализации уничтожать - также не работает. MessageBox ему болльше нравится...