我在用ATL写的ActiveX中调用Js:
SetClientSite(IOleClientSite *pClientSite)
{
HRESULT hr = IOleObjectImpl<CInfowareLabNM>::SetClientSite(pClientSite);
if (pClientSite)
{
//m_spClientSite = pClientSite;
OnSetClientSite() ;
}
return S_OK;
}
OnSetClientSite()
{
HRESULT hr ;
m_pScript=NULL; CComPtr < IOleContainer > spContainer;
hr = m_spClientSite->GetContainer(&spContainer); ATLASSERT(spContainer);
m_pHTMLDocument = spContainer;
hr=m_pHTMLDocument->get_scripts(&m_pScript);
ATLASSERT(m_pScript);
}
//调用Js:
outputParam()
{
if(m_pScript==NULL)
{
return -1;
} HRESULT hr;
CComDispatchDriver spScriptObj( m_pScript );
hr = spScriptObj.Invoke0(L"ShowMessage");}其中:
CComPtr <IHTMLElementCollection> m_pScript;
CComQIPtr < IHTMLDocument2 > m_pHTMLDocument;调用:spScriptObj.Invoke0(L"ShowMessage");
提示接口没有找到,什么原因?
SetClientSite(IOleClientSite *pClientSite)
{
HRESULT hr = IOleObjectImpl<CInfowareLabNM>::SetClientSite(pClientSite);
if (pClientSite)
{
//m_spClientSite = pClientSite;
OnSetClientSite() ;
}
return S_OK;
}
OnSetClientSite()
{
HRESULT hr ;
m_pScript=NULL; CComPtr < IOleContainer > spContainer;
hr = m_spClientSite->GetContainer(&spContainer); ATLASSERT(spContainer);
m_pHTMLDocument = spContainer;
hr=m_pHTMLDocument->get_scripts(&m_pScript);
ATLASSERT(m_pScript);
}
//调用Js:
outputParam()
{
if(m_pScript==NULL)
{
return -1;
} HRESULT hr;
CComDispatchDriver spScriptObj( m_pScript );
hr = spScriptObj.Invoke0(L"ShowMessage");}其中:
CComPtr <IHTMLElementCollection> m_pScript;
CComQIPtr < IHTMLDocument2 > m_pHTMLDocument;调用:spScriptObj.Invoke0(L"ShowMessage");
提示接口没有找到,什么原因?
CComPtr<IDispatch> item;
m_pScript->item(_variant_t(), _variant_t(1), &item);
item.Invoke0(L"ShowMessage");
谢谢Analyst