slightly better error reporting (could still be improved)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56465 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-10-20 10:43:17 +00:00
parent bd8b65be3d
commit f1430ac766

View File

@@ -831,6 +831,15 @@ wxActiveXContainer::~wxActiveXContainer()
} }
} }
// VZ: we might want to really report an error instead of just asserting here
#ifdef __WXDEBUG__
#define CHECK_HR(hr) \
wxASSERT_MSG( SUCCEEDED(hr), \
wxString::Format("HRESULT = %X", (unsigned)(hr)) )
#else
#define CHECK_HR(hr) wxUnusedVar(hr)
#endif
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// wxActiveXContainer::CreateActiveX // wxActiveXContainer::CreateActiveX
// //
@@ -843,20 +852,21 @@ void wxActiveXContainer::CreateActiveX(REFIID iid, IUnknown* pUnk)
{ {
HRESULT hret; HRESULT hret;
hret = m_ActiveX.QueryInterface(iid, pUnk); hret = m_ActiveX.QueryInterface(iid, pUnk);
wxASSERT(SUCCEEDED(hret)); CHECK_HR(hret);
// FrameSite // FrameSite
FrameSite *frame = new FrameSite(m_realparent, this); FrameSite *frame = new FrameSite(m_realparent, this);
// oleClientSite // oleClientSite
hret = m_clientSite.QueryInterface( hret = m_clientSite.QueryInterface(
IID_IOleClientSite, (IDispatch *) frame); IID_IOleClientSite, (IDispatch *) frame);
wxASSERT(SUCCEEDED(hret)); CHECK_HR(hret);
// adviseSink // adviseSink
wxAutoIAdviseSink adviseSink(IID_IAdviseSink, (IDispatch *) frame); wxAutoIAdviseSink adviseSink(IID_IAdviseSink, (IDispatch *) frame);
wxASSERT(adviseSink.Ok()); wxASSERT(adviseSink.Ok());
// Get Dispatch interface // Get Dispatch interface
hret = m_Dispatch.QueryInterface(IID_IDispatch, m_ActiveX); hret = m_Dispatch.QueryInterface(IID_IDispatch, m_ActiveX);
CHECK_HR(hret);
// //
// SETUP TYPEINFO AND ACTIVEX EVENTS // SETUP TYPEINFO AND ACTIVEX EVENTS
@@ -869,12 +879,13 @@ void wxActiveXContainer::CreateActiveX(REFIID iid, IUnknown* pUnk)
// type info // type info
wxAutoITypeInfo typeInfo; wxAutoITypeInfo typeInfo;
hret = classInfo->GetClassInfo(typeInfo.GetRef()); hret = classInfo->GetClassInfo(typeInfo.GetRef());
CHECK_HR(hret);
wxASSERT(typeInfo.Ok()); wxASSERT(typeInfo.Ok());
// TYPEATTR // TYPEATTR
TYPEATTR *ta = NULL; TYPEATTR *ta = NULL;
hret = typeInfo->GetTypeAttr(&ta); hret = typeInfo->GetTypeAttr(&ta);
wxASSERT(ta); CHECK_HR(hret);
// this should be a TKIND_COCLASS // this should be a TKIND_COCLASS
wxASSERT(ta->typekind == TKIND_COCLASS); wxASSERT(ta->typekind == TKIND_COCLASS);
@@ -895,6 +906,8 @@ void wxActiveXContainer::CreateActiveX(REFIID iid, IUnknown* pUnk)
if (! ti.Ok()) if (! ti.Ok())
continue; continue;
CHECK_HR(hret);
// check if default event sink // check if default event sink
bool defEventSink = false; bool defEventSink = false;
int impTypeFlags = 0; int impTypeFlags = 0;
@@ -920,7 +933,7 @@ void wxActiveXContainer::CreateActiveX(REFIID iid, IUnknown* pUnk)
// TYPEATTR // TYPEATTR
TYPEATTR *ta = NULL; TYPEATTR *ta = NULL;
hret = ti->GetTypeAttr(&ta); hret = ti->GetTypeAttr(&ta);
wxASSERT(ta); CHECK_HR(hret);
if (ta->typekind == TKIND_DISPATCH) if (ta->typekind == TKIND_DISPATCH)
{ {
@@ -935,21 +948,13 @@ void wxActiveXContainer::CreateActiveX(REFIID iid, IUnknown* pUnk)
HRESULT hret = HRESULT hret =
cpContainer->FindConnectionPoint(ta->guid, cp.GetRef()); cpContainer->FindConnectionPoint(ta->guid, cp.GetRef());
if ( !SUCCEEDED(hret) ) CHECK_HR(hret);
{
wxFAIL_MSG( wxString::Format("FindConnectionPoint(): %X",
(unsigned)hret) );
}
IDispatch* disp; IDispatch* disp;
frame->QueryInterface(IID_IDispatch, (void**)&disp); frame->QueryInterface(IID_IDispatch, (void**)&disp);
hret = cp->Advise(new wxActiveXEvents(this, ta->guid), hret = cp->Advise(new wxActiveXEvents(this, ta->guid),
&adviseCookie); &adviseCookie);
if ( !SUCCEEDED(hret) ) CHECK_HR(hret);
{
wxFAIL_MSG( wxString::Format("Advise(): %X",
(unsigned)hret) );
}
} }
} }
@@ -965,15 +970,17 @@ void wxActiveXContainer::CreateActiveX(REFIID iid, IUnknown* pUnk)
// Get IOleObject interface // Get IOleObject interface
hret = m_oleObject.QueryInterface(IID_IOleObject, m_ActiveX); hret = m_oleObject.QueryInterface(IID_IOleObject, m_ActiveX);
wxASSERT(SUCCEEDED(hret)); CHECK_HR(hret);
// get IViewObject Interface // get IViewObject Interface
hret = m_viewObject.QueryInterface(IID_IViewObject, m_ActiveX); hret = m_viewObject.QueryInterface(IID_IViewObject, m_ActiveX);
wxASSERT(SUCCEEDED(hret)); CHECK_HR(hret);
// document advise // document advise
m_docAdviseCookie = 0; m_docAdviseCookie = 0;
hret = m_oleObject->Advise(adviseSink, &m_docAdviseCookie); hret = m_oleObject->Advise(adviseSink, &m_docAdviseCookie);
CHECK_HR(hret);
// TODO:Needed? // TODO:Needed?
// hret = m_viewObject->SetAdvise(DVASPECT_CONTENT, 0, adviseSink); // hret = m_viewObject->SetAdvise(DVASPECT_CONTENT, 0, adviseSink);
m_oleObject->SetHostNames(L"wxActiveXContainer", NULL); m_oleObject->SetHostNames(L"wxActiveXContainer", NULL);
@@ -984,12 +991,12 @@ void wxActiveXContainer::CreateActiveX(REFIID iid, IUnknown* pUnk)
// Get IOleInPlaceObject interface // Get IOleInPlaceObject interface
hret = m_oleInPlaceObject.QueryInterface( hret = m_oleInPlaceObject.QueryInterface(
IID_IOleInPlaceObject, m_ActiveX); IID_IOleInPlaceObject, m_ActiveX);
wxASSERT(SUCCEEDED(hret)); CHECK_HR(hret);
// status // status
DWORD dwMiscStatus; DWORD dwMiscStatus;
m_oleObject->GetMiscStatus(DVASPECT_CONTENT, &dwMiscStatus); m_oleObject->GetMiscStatus(DVASPECT_CONTENT, &dwMiscStatus);
wxASSERT(SUCCEEDED(hret)); CHECK_HR(hret);
// set client site first ? // set client site first ?
if (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST) if (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST)
@@ -1003,6 +1010,7 @@ void wxActiveXContainer::CreateActiveX(REFIID iid, IUnknown* pUnk)
if (pPersistStreamInit.Ok()) if (pPersistStreamInit.Ok())
{ {
hret = pPersistStreamInit->InitNew(); hret = pPersistStreamInit->InitNew();
CHECK_HR(hret);
} }
if (! (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST)) if (! (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST))
@@ -1030,13 +1038,17 @@ void wxActiveXContainer::CreateActiveX(REFIID iid, IUnknown* pUnk)
hret = m_oleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, hret = m_oleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL,
m_clientSite, 0, (HWND)m_realparent->GetHWND(), &posRect); m_clientSite, 0, (HWND)m_realparent->GetHWND(), &posRect);
CHECK_HR(hret);
hret = m_oleObject->DoVerb(OLEIVERB_SHOW, 0, m_clientSite, 0, hret = m_oleObject->DoVerb(OLEIVERB_SHOW, 0, m_clientSite, 0,
(HWND)m_realparent->GetHWND(), &posRect); (HWND)m_realparent->GetHWND(), &posRect);
CHECK_HR(hret);
} }
if (! m_oleObjectHWND && m_oleInPlaceObject.Ok()) if (! m_oleObjectHWND && m_oleInPlaceObject.Ok())
{ {
hret = m_oleInPlaceObject->GetWindow(&m_oleObjectHWND); hret = m_oleInPlaceObject->GetWindow(&m_oleObjectHWND);
CHECK_HR(hret);
} }
if (m_oleObjectHWND) if (m_oleObjectHWND)