js中调用vs代码:
头文件中:
DECLARE_DISPATCH_MAP()cpp文件中:
对外开放接口:
EnableAutomation();
SetExternalDispatch(GetIDispatch(TRUE));
BEGIN_DISPATCH_MAP(CDlgChildListHtml, CDHtmlDialog)
DISP_FUNCTION(CDlgChildListHtml, "page_initial", DoHtmlInit, VT_EMPTY, VTS_VARIANT)
DISP_FUNCTION(CDlgChildListHtml, "pkg_change", DoPkgChange, VT_EMPTY, VTS_VARIANT VTS_VARIANT)
DISP_FUNCTION(CDlgChildListHtml, "on_pkgs_sort", DoPkgsSort, VT_EMPTY, VTS_VARIANT)
END_DISPATCH_MAP()void CDlgChildListHtml::DoHtmlInit(VARIANT& vStr1 )
{
CComVariant varStr1(vStr1);
varStr1.ChangeType(VT_BSTR); //Converts the CComVariant object to a VT_BSTR type.
USES_CONVERSION;
CString strPkgXml;
strPkgXml.Format( _T( "%s" ), OLE2T(varStr1.bstrVal) );
CDlgMain* dlgmain = (CDlgMain*)GetParent();
::SendMessage(dlgmain->m_hWnd, WM_LOADPAGE, 0, (LPARAM)strPkgXml.GetBuffer(0));
strPkgXml.ReleaseBuffer();
}vs中调用js 中方法:
void CDlgChildListHtml::MyApp_AddItem()
{
if (m_strInstalledJson.IsEmpty())
return;
CString strExec;
strExec.Format( _T( "ps_additems( %s )" ), m_strInstalledJson );
CComBSTR bstrjs = strExec.AllocSysString();
ExecJavascript(bstrjs);
m_strInstalledJson.Empty();
}BOOL CDlgChildListHtml::ExecJavascript(CComBSTR bstrjs)
{
IHTMLDocument2* pDocument;
HRESULT hr = GetDHtmlDocument(&pDocument);
if( hr == S_OK )
{
IHTMLWindow2* pWindow;
hr = pDocument->get_parentWindow(&pWindow);
if( hr == S_OK )
{
VARIANT ret;
ret.vt = VT_EMPTY;
hr = pWindow->execScript(bstrjs, L"javascript",&ret);
if (hr == S_OK)
return TRUE;
}
}
return FALSE;
}
本文介绍了如何在JavaScript中调用Visual Studio的代码以及在Visual Studio中反向调用JavaScript的方法,涉及头文件、cpp实现及对外接口的设计。

被折叠的 条评论
为什么被折叠?



