ATL创建的ActiveX实现JS回调
最近公司的产品需要使用ActiveX文件上传。讨论了基本所有的技术,最后还是决定C++搞个ActiveX。。。但上传的回调费了半天劲,才搞定。代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 |
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, ¶ms,NULL,NULL,NULL); return
S_OK; } |
JS调用方法:
1
2
3
4
5
6
7
8
9
10 |
<script type= "text/javascript" > function
OnClick() { var
activeX = document.getElementById( "ActiveX" ); activeX.FileExtFilter = "所有文件(*.*)|*.*||" ; activeX.TestJSInvoke( function
(e) { alert(e); }); return
false ; } </script> |
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。