Я создаю расширение оболочки в C ++ (ATL 9) с использованием Visual Studio 2008. Расширение оболочки создает глобальный объект MSXML2 :: IXMLDOMDocumentPtr m_XmlDoc в классе модуля. Этот m_XmlDoc затем используется в расширении всеми классами для чтения XML-документа.
Проблема, с которой я сталкиваюсь, связана с Internet Explorer. Когда расширение Shell активно, и я открываю / закрываю Internet Explorer, я получаю диалог отладки, и IE вылетает. Сообщение об ошибке гласит: «Необработанное исключение в 0x6aac30f1 в iexplore.exe: 0xC0000005: Местоположение чтения нарушения доступа 0x03050970».
Когда я нажимаю кнопку «разбить» в окне сообщения, я перехожу к методу «Отпустить» COM Smart Pointer, и кажется, что ошибка включена
m_pInterface-> Release ();
Этот вызов был сделан из деструктора Модуля, а также значение m_pInterface не NULL. Я думаю, что, возможно, Internet Explorer использует XML DOM, и вызов Release создает в нем некоторую проблему.
MSXML2::IXMLDOMDocumentPtr m_XmlDoc;
In _AtlModule.Init() method
::CoInitialize(NULL);
m_XmlDoc.CreateInstance(MSXML2::CLSID_DOMDocument40);
Код dllMain:
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
::CoInitialize(NULL);
if (dwReason == DLL_PROCESS_ATTACH)
{
_AtlModule.Init();
CreateImageLists();
::DisableThreadLibraryCalls(hInstance);
}
hInstance;
return _AtlModule.DllMain(dwReason, lpReserved);
}