您的位置:首页 > 其它

activex控件中调用get_Script失败的解决办法

2011-07-08 15:53 441 查看
在项目中,需要从activex中回调javascript所写的函数,之前的做法是:HRESULT hr = S_OK;
IServiceProvider *isp = NULL, *isp2 = NULL;

IOleClientSite* pClientSite = GetClientSite();
IOleContainer* pOleContainer;
if (pClientSite)
{
hr = pClientSite->GetContainer(&pOleContainer);
if (FAILED(hr))
{
hr = S_OK;
TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to query interface of pOleContainer...");
goto CLEANUP;
}
hr = pOleContainer->QueryInterface(IID_IHTMLDocument2,reinterpret_cast <void **> (&m_html_document));
if (FAILED(hr))
{
hr = S_OK;
TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to query interface of m_html_document...");
goto CLEANUP;
}
//hr = pClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void**>(&isp));
//if (FAILED(hr))
//{
// hr = S_OK;
// TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to query interface of isp...");
// goto CLEANUP;
//}

//hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast<void**>(&isp2));
//if (FAILED(hr))
//{
// hr = S_OK;
// TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to query interface of isp2...");
// goto CLEANUP;
//}

////获得浏览器
////hr = isp->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void**>(&m_browser));
//hr = isp2->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void**>(&m_browser));
//if (FAILED(hr))
//{
// hr = S_OK;
// TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to get interface of m_browser....");
// goto CLEANUP;
//}

//hr = m_browser->get_Document((IDispatch**)&m_html_document);
//if (FAILED(hr))
//{
// hr = S_OK;
// TR_LOGDBG("CMSPAudioCtrl::OnSetClientSite | Failed to get interface of m_browser....");
// goto CLEANUP;
//}
于是在用m_html_document调用get_Script就总是失败,后来得知这种实现的方法不能在有框架的页面中使用,需要改为调用conterner的方法,见上面源码,这样就可以将activex空间嵌套在字框架中使用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: