ATL创建的ActiveX实现JS回调

本文介绍了一种使用ActiveX进行文件上传的方法,并详细展示了如何实现上传后的JavaScript回调功能。通过C++编写ActiveX控件并与JavaScript交互,实现了文件选择和路径传递的功能。
摘要由CSDN通过智能技术生成

最近公司的产品需要使用ActiveX文件上传。讨论了基本所有的技术,最后还是决定C++搞个ActiveX。。。但上传的回调费了半天劲,才搞定。代码如下

 

STDMETHODIMP CFileSelector::TestJSInvoke(VARIANT scriptCallback)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	CComPtr<IDispatch> spCallback;

	if(scriptCallback.vt == VT_DISPATCH)
		spCallback = scriptCallback.pdispVal;

	CComVariant avarParams[1];
	CFileDialog dlgFile(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT | OFN_FILEMUSTEXIST,L"所有文件(*.*)|*.*||",NULL,NULL,FALSE);

	if(dlgFile.DoModal() == IDOK)
	{
		avarParams[0] = dlgFile.GetPathName();
	}

	DISPPARAMS params = { avarParams, NULL,1,0 };

	if(spCallback)
		spCallback->Invoke(0,
			IID_NULL,
			LOCALE_USER_DEFAULT,
			DISPATCH_METHOD,
			&params,NULL,NULL,NULL);

	return S_OK;
}

 JS调用方法:

<script type="text/javascript">
        function OnClick() {
            var activeX = document.getElementById("ActiveX");
            activeX.FileExtFilter = "所有文件(*.*)|*.*||";
            activeX.TestJSInvoke(function (e) {
                alert(e);
            });
            return false;
        }
    </script>

 

 

转载于:https://www.cnblogs.com/briny/p/3512877.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值