2009-04-15 3 views
0

У меня есть dll, которая создает глобальный критический раздел, инициализирует и использует его.Избегайте повторной инициализации критического раздела

Теперь стороннее приложение использует/загружает dll более одного раза, что приводит к повреждению кучи.

appverifier предупреждает меня с

-> Verifier СТОП 00000211: Pid 0x1470: Критическая секция уже инициализирован. < -

Использование глобального флага для проверки того, что объект критического раздела уже инициализирован, не помогает, любые идеи по его выполнению?

Благодаря

+0

Возможный дубликат [Инициализировать критический раздел только один раз для процесса] (http://stackoverflow.com/questions/724560/initialize-critical-section-only-once-for-a-process) –

ответ

0

Теперь приложение третья сторона использует/погрузка длл несколько раз

Windows, не перезагружать одну и ту же DLL несколько раз. Где такой же означает тот же путь. Если стороннее приложение загружается из разных мест, это проблема.

+0

Windows может relaod одна и та же DLL несколько раз. DLL подсчитываются. У вас также есть призывы к остановке процесса и потоку. Если приложение загрузки освобождает библиотеку и загружает ее снова, это вполне возможно. Он не указывает код очистки в критическом разделе при освобождении dll. –

+1

DLL не будет перезагружена другим вызовом LoadLibrary, ссылка будет увеличена, но DllMain будет вызываться * not *. – Richard

0

Возможно, вам помогут API-интерфейсы «setAtom» и «getAtom»? Я знаю, что они немного «старая школа», но вы никогда не узнаете.

Смежные вопросы