项目中经常碰到JS与Com组件交互的问题,通过查找网络资料和项目实际需要,总结如下:
一、Com组件简单回调JS代码
JS中定义函数
function printMsg(msg1, msg2, msg3, msg4, msg5) {
alert(msg1);
alert(msg2);
alert(msg3);
alert(msg4);
alert(msg5);
}
Com组件中定义函数接口,以便将JS中定义的函数作为参数传递给Com组件
头文件中定义IDispatch接口:
static CComPtr<IDispatch> m_spCallback;
STDMETHODIMP CJSCallBack::SetJsCallbackFunc(VARIANT scriptCallback)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加实现代码
if (scriptCallback.vt == VT_DISPATCH)
{
m_spCallback = scriptCallback.pdispVal;
}
return S_OK;
}
在JS中调用SetJsCallbackFunc接口注册回调函数
var obj = new ActiveXObject("ComForJS.JSCallBack.1");
result = obj.SetJsCallbackFunc(printMsg); <

本文详细介绍了COM组件如何回调JavaScript代码,尤其是在多线程环境中调用JS函数的问题。通过创建消息窗口并利用PostMessage在主线程中调用JS函数,成功解决跨线程调用的难题。此外,还探讨了从JS函数返回值到COM组件的方法。
最低0.47元/天 解锁文章
738

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



