Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Особенности запуска потоков Dll в Windows
Форум на CrossPlatform.RU > Библиотеки > Другие библиотеки
Iron Bug
Наступила на интересные грабли. Уже думала, у меня крыша едет. Оказалось, не у меня, а у венды :)
Предыстория задачи: была у меня консольная утилька, стало нужно переделать её в dll. Я решила просто перенести содержимое инициализации из main в DLL_PROCESS_ATTACH функции DllMain. В инициализации порождался дочерний поток, ожидался ответ от него и на этом инициализация, собственно, завершалась.
И вот после переноса инициализации в DLL_PROCESS_ATTACH программа перестала работать. Причём очень странно: она не получала ответа от дочернего потока. Я перековыряла всё, перепроверила весь поток (а там у меня довольно навороченный поток был, с кучей всяческих темплейтов и библиотек буста). Перерыла всё, пока не поняла, что поток всё же запускается.... НО! Он запускаеся ПОСЛЕ выхода из обработки DLL_PROCESS_ATTACH. Вот так вот жосско.
Выход, естественно, был сделан через дополнительную функцию инициализации в библиотеке, которая вызывалась уже после загрузки библиотеки через GetProcAddress. Так всё прекрасно работает.
Что интересно, такая же схема в линюксе (когда поток порождается в инициализации __attribute__ ((constructor)) функции библиотеки) прекрасно работает.
Вот такие грабельки. Век живи - век учись :)

P.S. Нам надо нарыть смайлик: "грабли" :)
Алексей1153
пжалуста )
Нажмите для просмотра прикрепленного файла
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.