js传递数组参数到ActiveX

//JS

<BODY>

<object id="ArtiveXForWeb1" width=121 height=77 classid="CLSID:5FF56EFD-C35D-43EB-9B7D-662BF957583D" >
        <param name="_Version" value="65536">
        <param name="_ExtentX" value="3202">
        <param name="_ExtentY" value="2037">
        <param name="_StockProps" value="0" >
</object>

<input type='button' οnclick='javascript:sendMsg();' value='Click'>
<script language="javascript" type="text/javascript">
    function sendMsg()
    {
        var arrPath=new Array();
        arrPath[0]="path0";
        arrPath[1]="path1";
        arrPath[2]="path2";
       
        var arrName=new Array();
        arrName[0]="name0";
        arrName[1]="name1";
        arrName[2]="name2";
       
        var cnt=3;
    
        ArtiveXForWeb1.SendFilePathAndLength(arrPath,arrName,cnt);
    }
   
</script>
</BODY>

=========================================================================================================

// CArtiveXForWebCtrl 的主调度接口

[ uuid(956990C4-95E0-47A9-B1D8-C84CE27728D3),
   helpstring("ArtiveXForWeb Control 的调度接口")]
dispinterface _DArtiveXForWeb
{
   properties:
   methods:

    [id(DISPID_ABOUTBOX)] void AboutBox();
   
    [id(1), helpstring("方法SendFilePathAndLength")] void SendFilePathAndLength(IDispatch* FilePath, IDispatch* FileName, LONG Count);
};


 

=========================================================================================================

ctrl.cpp类中的函数定义与内容,当然要在ctrl.h头文件中定义

void CArtiveXForWebCtrl::SendFilePathAndLength(IDispatch* FilePath, IDispatch* FileName, LONG Count)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: 在此添加调度处理程序代码
int cnt=(int)Count;
CComVariant varValue;
CString strPath;
CString strName;
for (int i=0;i<cnt;i++)
{
   int nret=getValueOfIDs(FilePath,i,&varValue);
   if (nret)
   {
    varValue.ChangeType(VT_BSTR);
    //CComBSTR bstrShowVal=varValue.bstrVal;
    strPath.Append(varValue.bstrVal);
    strPath.Append(L",");
   }
   nret=getValueOfIDs(FileName,i,&varValue);
   if (nret)
   {
    varValue.ChangeType(VT_BSTR);
    strName.Append(varValue.bstrVal);
    strName.Append(L",");
   }
}
strPath.Append(L"/");
strPath.Append(strName);
MessageBox(strPath);
}
// 通过js的数组传进来的IDispatch,根据js数组下标来获取数组元数
int CArtiveXForWebCtrl::getValueOfIDs(IDispatch* pDisp, int i, VARIANT *varValue)
{
if( pDisp != NULL && i >= 0 )
{
   CComVariant varName(i,VT_I4);
   varName.ChangeType(VT_BSTR);
   DISPID dispId;
   HRESULT hr = pDisp -> GetIDsOfNames(IID_NULL,&varName.bstrVal,1,LOCALE_USER_DEFAULT,&dispId);
   if( FAILED(hr) ) return 0;
   DISPPARAMS noArgs = { NULL, NULL, 0, 0 };
   hr = pDisp -> Invoke( dispId,
    IID_NULL,
    LOCALE_SYSTEM_DEFAULT,
    DISPATCH_PROPERTYGET,
    &noArgs,
    varValue,
    NULL,
    NULL );
   if( SUCCEEDED(hr) ) return 1;
}
return 0;
}


 

控件弹出网页命令:

CString str;
str.Append(L"http://localhost/ActiveXJSExchange/Page1.htm?index=");
str.Append(L"1,2,3");
ShellExecute(m_hWnd,L"open", str,L"",L"", SW_SHOWNORMAL);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值