Задача ставится следующим образом: есть BHO, который надо полностью уничтожить (сам BHO мой). Для этого, очевидно, надо заставить Internet Explorer выгрузить его из себя. Однако, с этим возникают проблемы. Делаю так: в Invoke при выставлении некоторого глобального флажка делаю Unadvise(), делаю Release() всех объектов, которые получал через QueryInterface, и пытаюсь вызвать CoFreeUnusedLibraries/CoFreeUnusedLibrariesEx. Этих вызывал в разных комбинациях, по несколько раз, в отдельном потоке — ничего не помогает. DllCanUnloadNow() при этом, ессно, возвращает S_OK. Насколько я понял, проблема в том, что IE где-то держит ссылки на мой объект, поскольку его reference count (который ведется по AddRef()/Release()) после Unadvise() становится равным 3, хотя должен вроде бы быть 1 (до этого — 4, должен вроде быть 2). Каким образом можно найти то место, где создаются лишние ссылки?
И еще, мой ClassFactory, похоже, как создается один раз в DllGetClassObject(), так после этого и не уничтожается, даже при закрытии IE. Я его попробовал уничтожать сам перед выгрузкой — вроде IE не обваливается. Так делать можно?