![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
prefer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.12.2007 Репутация: нет Всего: нет |
Добого времени суток!
Собственно код:
dll как видно, загружается из другой dll, и юзает её функции.... Всё дело в том, что при выгрузке основной dll не выскакивает MessageBox => библиотека должна выгрузится, но видимо что-то её загружает позже... хз... пысы: Win Mobile 5, основная dll - плагин today.. |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
ф-ии LoadLibrary, FreeLibrary нельзя вызывать в DLLMain, кури MSDN |
|||
|
||||
prefer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.12.2007 Репутация: нет Всего: нет |
стал вызывать в обработчике вот так:
тоже самое, загружается и тут же выгружается, никакие функции из dll не подгружаю |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
||||
|
||||
prefer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.12.2007 Репутация: нет Всего: нет |
хочу сказать, что она "типа" выгружается, хотя dll удалить нельзя, она висит в памяти
|
|||
|
||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
как так?
а в чем проблема-то? У тебя MessageBox вызывается только в случае невыгрузки библиотеки:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
DominiK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 11.3.2007 Где: Россия, Омск Репутация: нет Всего: нет |
Выпал
![]() |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
LoadLibrary можно вызывать в DllMain только если длл уже загружена, тогда сразу возвращается ее хендл, а фактической загрузки не происходит.
Загружать еще не загруженную длл в DllMain нельзя. Читайте msdn там все написано. |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
GoldFinch, в MSDN черным по белому написано:
Добавлено через 2 минуты и 12 секунд т.е. это предостережение от загрузки в длл самой себя, что естественно породит рекурсивные вызовы DllMain ни каких системных ограничений для DllMain в этом плане не существует -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
Как раз относительно "самой себя" нигде ничего не сказано - сказано, что нельзя использовать LoadLibrary.
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
GremlinProg |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
что есть рекурсия? что есть рекурсия, в DLLMain, ama_kid?
о потоках речи и не идет Добавлено через 4 минуты и 30 секунд вообще-то, перед первым постом, я потратил 5 минут на сборку 2 длл и загрузку одной из другой в DllMain, поэтому и берусь утверждать о трактовке (а по сути, о варианте, перевода) предупреждения из MSDN, несущего рекомандательный характер, как если бы мы сказали: делай только в том случае, если если знаешь, что делаешь. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||
|
|||||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
значит надо убедиться только в том, что длл которая загружается в ДллМейн не попытается загрузить длл которая ее загружает?
|
|||
|
||||
ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
То, что в даннный момент не возникло проблем - еще ничего не значит ![]()
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
конечно, ama_kid, не спорю я защищал только само "право на вызов", поскольку, сразу как увидел фразу о его запрете, тут же появились сомнения, поскольку реализовать такой запрет - смерти подобно, все равно, что запретить вложенность директив типа include, да и сложно бы было объяснить нескольким миллионам программистов, что запрет стоит только для того, чтобы они, такие хорошие, по неопытности не понаделали бы ошибок а цитата касается по-сути, того же, что уже говорилось ранее: изучайте инструменты, которыми пользуетесь, поскольку некоторые функции могут динамически подгружать другие библиотеки, что потенциально может привести к тому же результату, незнание не освобождает от ответственности GoldFinch, рекурсия может быть и косъвенной, предостережение MSDN призывает учитывать сложность иерархии загрузок, это, по-сути - дерево библиотек, в котором циклы могут иметь критические последствия -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
GremlinProg, ты знаеш какие дллки подгружают системные библиотеки? это же нигде не документировано. а если и знаеш, то откуда те знать как это будет в следующем сервиспаке винды?
|
|||
|
||||
ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
GoldFinch, прими за правило - не использовать при загрузке dll (читай, в DLL_PROCESS_ATTACH) нетривиальные команды, и жизнь станет проще...
![]() -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
инструменты всех MS-отладчиков позволяют определять как подгрузку, так и выгрузку библиотек, потоков, процессов и т.п.
в MSVC лог таких загрузок-выгрузок обычно выводится в output среды при работе программы из отладчика, т.е. таким образом вы всегда можете следить за иерархией используемых библиотек, даже динамически подгружаемых, и обходить проблемные места -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
GremlinProg, и вы для всех версий винды и комбинаций стороннего ПО будете лог смотреть, чтобы убедиться что все в порядке?
|
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
GoldFinch, вообще-то майкрософт для совместимости, в том числе, и ведет свою документацию, не забывая про все версии своих операционок. Программная документация, обычно сопровождающая сторонний софт тоже подразумевает такой диалог при их интеграции куда-либо во вне, и за примерами далеко ходить не надо: IE, AdobePhotoshop, Apache и т.п. Для увеличения популярности своих продуктов им просто выгодно самим следить за возможными проблемами при разработке их дополнений сторонними производителями. Так что мой ответ - скорее да, чем нет.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
GremlinProg, вообщето в документации MS сказано что LoadLibrary в DllMain вызывать нельзя
|
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
я уже отметил предупредительный характер запрещения
must not и can not - разные вещи -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |