COM DLL была выгружена со счетчиком блокировки по-прежнему ненулевой - PullRequest
1 голос
/ 20 декабря 2011

Моя программа оснащена инструментом VSTS VSinstr для сбора информации о покрытии.Но во время работы моих инструментированных двоичных файлов, в частности, одной из моих COM-библиотек, моя программа все время падает на точке выхода.

Я отлаживаю, чтобы выяснить, что причиной сбоя является:

  • во-первых, я загружаю COM-библиотеку с помощью coLoadLibrary (bAutoFree = TRUE).
  • моя программа выполняет какую-то работу.
  • пришла к точке выхода.
  • И затем мойCOM dll выгружается.WINDBG указывает, что его DllMain вызывается с помощью dwReason == DLL_PROCESS_DETACH.
  • код в моей COM DLL выполняется и вызывает нарушение прав доступа (код c0000005).Что меня смущает, так это то, что в настоящее время значение _AtlModule.m_nLockCnt по-прежнему равно 2!

Есть идеи?

1 Ответ

0 голосов
/ 21 декабря 2011

Чтобы узнать, безопасно ли выгружать DLL, загруженную через COM API, вызывается DLL DllCanUnloadNow. Здесь вы можете установить точку останова и проверить, одобряет ли ваша COM DLL выгрузку (хотя якобы все еще заняты какой-либо фоновой деятельностью).

...