没有什么规范。脚本执行器会帮助转换。转换不了就抛出异常(VBScript就经常见。。)。
解决方案 »
- 发送表单后,如何使接收内容是一个表格
- document的表单问题
- jqurey ul 的问题
- 关于getElementById和getElementByName的问题
- 各位,关于引用当前按钮参数的……详见内容!
- javascript的语句 FOR...IN 不能遍历对象属性了。大家帮帮忙!!!
- js经验不足,做到一半不知道如何继续了。。。
- 发现一个关于javascript日期存在的bug,不知道是否是普遍现象~
- 急救!!!!!!!!!对下拉列表框的值清空,为什么清除不完呢????
- checkbox有2个全选按钮,如何选择其中一个,另一个也自动选上,反之亦然
- 大家好:在javascript中怎么定义公共变量等
- 数据库数据给数组赋值的问题,急!
比如用javascipt向ATL组件传一个字符串数组,
JS中怎么声明,调用? ATL中如何声明接口,使用参数 ? 谢谢答复。
如 comObject.doAdd( "1", 2 );
Javascript Engine读取到的参数是LPTSTR类型。
然后会把参数转换成VARIANT类型
然后把这些参数做成一个参数数组(VARIANT类型数组)
然后再调用这个Com对象的invoke函数一个Com组件聪明的知道他自己的每一个引出函数有几个参数,每个参数是什么类型(类型信息定义在IDL文件中,直接编译进DLL或EXE中),所以它能成功的将参数转换成整数然后调doAdd函数。
如果JS传给组件字符串或字符串数组, 组件接口函数 应该分别以哪种声明方式来接受 ? flyycyu(fly):能讲讲用字符串传递数组吗?最好有个 简单的例子。为什么不能直接传数组 ?
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);
};
巴迪,很感谢你的回复,不过传整型浮点型我都搞定了。 我现在想知道的是怎么传字符串和字符串数组 如果组件以VARIANT接受的话,该怎么去处理,是转换成 BSTR 还是 LPCTSTR ? 谢谢答复, 我急着要散分了 :)
收到的参数应该是 IDispatch*(我猜)JavaScript中的数组本身大概是一个Com对象。var a = new Array;
a[0] = "1";
a[1] = 2;
comObject.doSomething( a );
是吗 ? 我觉得组件应该以 VARIANT 来接受这个数组。 至于数组传过来之后怎么还原为数组我就不知道了。
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);
如:动态数组
<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>
动态数组:
<Root>
<Array value='dfsdf'/>
<Array value='asdf'/>
...
</Root>
多维数组:
<Root>
<Array value='dfsdf' value2='' value3='' .../>
<Array value='asdf' value2='' value3='' .../>
...
</Root>
这个数据流作为字符串发到com上,com在内部用dom解析就好了