Может ли DllMain создавать потоки? Я написал код: Код (Text): unsigned long __stdcall func1(void *p) { __asm int 3; } DllMain() { CreateThread(0,0,func1,0,0,0); Sleep(100); } бряк не срабатывает, хотя CreateThread выполняется удачно.
DisableThreadLibraryCalls сделай, дэдлок у тебя происходит. И не в коем случае не вызывай из дллмаин Wait*, Sleep* функции (см. рихтера, почему это так)
Вообще в дллмейн аккуратно надо делать все. Если это длл к твоей проге, лучше для этого выделить отдельную инициализирующую функцию - не зря в плагинах такие делают.
Я немного неправильно написал пример. В ДллМайн есть ещё проверка. Код (Text): int __stdcall DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) { if (fdwReason == DLL_PROCESS_ATTACH) { CreateThread(0,0,SomeFunction,0,0,0); return 1; } else return 0; } Всё-раво я не совсем понимаю в чём здесь проблемма. DLL_PROCESS_ATTACH вызывается только один раз. При этом создаётся новый поток. Сообщение DLL_THREAD_ATTACH встаёт в очередь моей библиотеки. После завершения DllMain и затем LoadLibrary поток ведь должен запуститься. почему этого не происходит? почему поток не разблокируется? функция DisableThreadLibraryCalls только лишь запрещает посылку сообщений DLL_THRAED_ATTACH и DLL_THREAD_DETACH, но как она влияет на блокировку потоков?