没有什么规范。脚本执行器会帮助转换。转换不了就抛出异常(VBScript就经常见。。)。

解决方案 »

  1.   

    没什么规范,尽量用字符串就是了,数组就用xml组织吧
      

  2.   


     比如用javascipt向ATL组件传一个字符串数组,
     JS中怎么声明,调用? ATL中如何声明接口,使用参数 ?  谢谢答复。
      

  3.   

    首先Javascript Engine(假设Engien是用C++编写)解释语句
    如 comObject.doAdd( "1", 2 );
    Javascript Engine读取到的参数是LPTSTR类型。
    然后会把参数转换成VARIANT类型
    然后把这些参数做成一个参数数组(VARIANT类型数组)
    然后再调用这个Com对象的invoke函数一个Com组件聪明的知道他自己的每一个引出函数有几个参数,每个参数是什么类型(类型信息定义在IDL文件中,直接编译进DLL或EXE中),所以它能成功的将参数转换成整数然后调doAdd函数。
      

  4.   


      如果JS传给组件字符串或字符串数组, 组件接口函数  应该分别以哪种声明方式来接受 ?  flyycyu(fly):能讲讲用字符串传递数组吗?最好有个  简单的例子。为什么不能直接传数组 ?
      

  5.   

    在javascript中声明变量声明
    var a = "1";
    var b = 2;
    comObject.doAdd( "1", 2 );
    COM接口定义和普通的COM编程一样
    [
    object,
    uuid(7213F5FD-7637-4295-8274-C118D797D58F),
    dual,
    nonextensible,
    helpstring("YourCom Interface"),
    pointer_default(unique)
    ]
    interface YourCom : IDispatch{
    [id(1), helpstring("method doAdd")] HRESULT doAdd(LONG a, LONG b);
    };
      

  6.   


     巴迪,很感谢你的回复,不过传整型浮点型我都搞定了。 我现在想知道的是怎么传字符串和字符串数组  如果组件以VARIANT接受的话,该怎么去处理,是转换成 BSTR 还是 LPCTSTR ? 谢谢答复, 我急着要散分了 :)
      

  7.   

    如果传递的参数是数组的话
    收到的参数应该是 IDispatch*(我猜)JavaScript中的数组本身大概是一个Com对象。var a = new Array;
    a[0] = "1";
    a[1] = 2;
    comObject.doSomething( a );
      

  8.   


     是吗 ? 我觉得组件应该以 VARIANT 来接受这个数组。 至于数组传过来之后怎么还原为数组我就不知道了。
      

  9.   

    COM中的函数:
    STDMETHODIMP CfControl::vm(VARIANT array, LONG size)
    {
    // TODO: 在此添加实现代码
    USES_CONVERSION; std::ostringstream buf; OLECHAR * name= L"toString";

    DISPID disp;
    array.pdispVal->GetIDsOfNames(IID_NULL,&name,1,GetUserDefaultLCID(),&disp); DISPPARAMS dispp={0,0,NULL,NULL}; VARIANT r;
    array.pdispVal->Invoke(disp,IID_NULL,GetUserDefaultLCID(),DISPATCH_METHOD,&dispp,&r,NULL,NULL); buf<<OLE2T(r.puiVal);

    MessageBox(buf.str().c_str());
    buf.clear();

    return S_OK;
    }调用脚本:
             var s=[];
    s[0]="abc";
    s[1]="123451";
    s[2]="xyu";

    fControl.vm(s,s.length);
      

  10.   

    我认为在com中接收的参数全用BSTR就行了,传递字符串数组用xml数据流;
    如:动态数组
    <Root>
       <Array id='1' value='dfsdf'/>
       <Array id='2' value='asdf'/>
       ...
    </Root>
    甚至是多维数组:
    <Root>
       <Array id='1' value='dfsdf'>
           <A2 id='' value=''/>
           ...
       </Array>
       <Array id='2' value='asdf'>
           <A2 id='' value=''/>
           ....
       </Array>
       ...
    </Root>
      

  11.   

    xml结构这么安排会更好些
    动态数组:
    <Root>
       <Array value='dfsdf'/>
       <Array value='asdf'/>
       ...
    </Root>
    多维数组:
    <Root>
       <Array value='dfsdf' value2='' value3='' .../>
       <Array value='asdf' value2='' value3='' .../>
       ...
    </Root>
    这个数据流作为字符串发到com上,com在内部用dom解析就好了