COM中如何传数组到ASP?(200分)

  • 主题发起人 主题发起人 hopfield
  • 开始时间 开始时间
H

hopfield

Unregistered / Unconfirmed
GUEST, unregistred user!
Asp不支持SafeArray,我试过数组型的Variant(用VarCreateArray),在自己写的exe里
可以读出Variant里面的数组,在ASP里面却不行,例如:
1 set comobj = CreateObject("ComName")
2 bb = ComObj.GetArray
3 Response.write(bb(1))

系统执行到第三句时提示类型不匹配,奇怪的是我用isArray(bb)判断,返回的又是true,
而且还可以用UBound(bb)和LBound(bb)取出数组的上下界.
 
没人回答?
 
这个问题可以这样
在asp这边,用tt=array(param1,param2,param3),等,用array形成一个数组,
在com中,用olevariant类型的in/out参数,读出来便可使用。
 
一般是提供一个item这样的属性.然后在item属性的读方法中取数据的内容.
 
方法的返回值应该用OleVariant,而不用Variant。

类似

var
t:OleVariant;
....
t:=VarArrayCreate(varVariant,[0,2]);
t[0]:=123;
t[1]:='123';
t[2]:=123.0;
Result:=t;
....

ASP中
set comobj = CreateObject("ComName")
bb = ComObj.GetArray
Response.write(bb(0))
Response.write(bb(1))
Response.write(bb(2))
 
to liguang:
你的办法的实质就是将Com的属性设为另一个Com对象,在这个Com对象中提供读写数组的
方法.这种办法没错,只是我发这个贴的初衷就是避免用这种方法,直接传数组.

to vastyellow:
你的办法不行,参数传不出来的!

to kyq:
你的办法其实和我的办法是完全一样的,不能用,不信你试试.

有一种办法可能可以解决我的问题,那就是用:聚合. 只是聚合实现起来太麻烦了!
不知道那位大虾做过聚合,给我讲讲?
 
不会吧,上上下下已经写了2x个此类程序,可没见过什么问题啊。
:)
 
to kyq:
找到原因了! 我们的唯一区别是: 你用:
VarArrayCreate([0,2],varVariant)
而我用的是:
VarArrayCreate([0,2],varByte)
我发现只能用VarVariant,用其他任何类型Asp都不认!

Thanks!
 
接受答案了.
 
真不好意思,我用kyq的代码试了一下下,结果Asp告诉我IsArray(bb)=False
在Delphi中可以,请教还有什么其它的要注意么?
 
或者直接与我联系吧。
kyq@21cn.com
 
后退
顶部