c++调用jsp一般通过在窗口中内嵌一个CAxWindow来实现的
在CAxWindow中通过调用CreateControlEx来初始化话IWebBrowser2接口
如:
CComPtr<IUnknown> punknown;
HRESULT hr = CreateControlEx(L"Shell.Explorer", NULL, NULL, &punknown);
CComQIPtr<IWebBrowser2> spWebBrowser2 = punknown;
或者通过AttachControl来实现
CComPtr<IAxWinHostWindow> spWinHost;
QueryHost(&spWinHost);
spWinHost->AttachControl(m_spWebBrowser2,m_hWnd);
c++和jsp交互的情况越来越多,可以通过IWebBrowser2接口调用jsp函数,基本步骤如下:
(1)
CComPtr<IDispatch> spDocDisp;
CComQIPtr<IWebBrowser2> spWebBrowser2
spWebBrowser2->get_Document(&spDocDisp);
(2)
CComPtr<IHTMLDocument2> spDoc2;
spDocDisp->QueryInterface(IID_IHTMLDocument2, (void**)&spDoc2);
(3)
CComPtr<IDispatch> spScript;
spDoc2->get_Script(&spDisp);
(4)
DISPID dispid = NULL;
CComBSTR bstrFun(“dosomething”);
spScript->GetIDsOfNames(IID_NULL, &bstrFun, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
(5)
DISPPARAMS params;
spScript->Invoke(dispid,IID_NULL,0,DISPATCH_METHOD,¶ms,&Result,&excepInfo,&ArgErr);