ATL创建的ActiveX实现JS回调
阅读原文时间:2023年07月09日阅读:1

最近公司的产品需要使用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调用方法: