最近公司的产品需要使用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> |
原文:http://www.cnblogs.com/briny/p/3512877.html