Explicitly unregister custom wxWebViewIE namespaces when we are done with them. Also add a missing ClassFactory::AddRef.
Closes #14749 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72715 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -241,7 +241,10 @@ public:
|
||||
class ClassFactory : public IClassFactory
|
||||
{
|
||||
public:
|
||||
ClassFactory(wxSharedPtr<wxWebViewHandler> handler) : m_handler(handler) {}
|
||||
ClassFactory(wxSharedPtr<wxWebViewHandler> handler) : m_handler(handler)
|
||||
{ AddRef(); }
|
||||
|
||||
wxString GetName() { return m_handler->GetName(); }
|
||||
|
||||
//IClassFactory
|
||||
HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown* pUnkOuter,
|
||||
|
@@ -104,9 +104,27 @@ bool wxWebViewIE::Create(wxWindow* parent,
|
||||
|
||||
wxWebViewIE::~wxWebViewIE()
|
||||
{
|
||||
for(unsigned int i = 0; i < m_factories.size(); i++)
|
||||
wxDynamicLibrary urlMon(wxT("urlmon.dll"));
|
||||
if(urlMon.HasSymbol(wxT("CoInternetGetSession")))
|
||||
{
|
||||
m_factories[i]->Release();
|
||||
typedef HRESULT (WINAPI *CoInternetGetSession_t)(DWORD,
|
||||
wxIInternetSession**,
|
||||
DWORD);
|
||||
wxDYNLIB_FUNCTION(CoInternetGetSession_t, CoInternetGetSession, urlMon);
|
||||
|
||||
wxIInternetSession* session;
|
||||
HRESULT res = (*pfnCoInternetGetSession)(0, &session, 0);
|
||||
if(FAILED(res))
|
||||
{
|
||||
wxFAIL_MSG("Could not retrive internet session");
|
||||
}
|
||||
|
||||
for(unsigned int i = 0; i < m_factories.size(); i++)
|
||||
{
|
||||
session->UnregisterNameSpace(m_factories[i],
|
||||
(m_factories[i]->GetName()).wc_str());
|
||||
m_factories[i]->Release();
|
||||
}
|
||||
}
|
||||
FindClear();
|
||||
}
|
||||
|
Reference in New Issue
Block a user