如何给ActiveX DLL类中传递一个数组?

siyunying 2002-10-25 04:20:19
我在类中声明了一个数组变量.
因为在类中,数组不能声明为public,就
private dblA(3,4) as double
但没有办法从外界给他传值。
...全文
144 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zhang_1978 2002-10-26
  • 打赏
  • 举报
回复
其实照说应该用属性

不过我觉得不叫麻烦,所以我在做的时候用的是传字符串,中间有分隔符如(·),到里面或者返回后再分割
zxinlin 2002-10-26
  • 打赏
  • 举报
回复
然后再用IsArray作判断。
zxinlin 2002-10-26
  • 打赏
  • 举报
回复
都可以。
把形参设置成Varian的。
siyunying 2002-10-26
  • 打赏
  • 举报
回复
to myhfit:
是不是,数组根本不可以通过类属性的方式传递???

我写的一个类中,其它参数都是用属性的方式传递,
类中有一个二维数组,如果也用属性的方式传递,那么
数据输入的方式就一致了。
我不想用“类的方法“这种方法来传递数组。

经过我自己的实验,我是发现通过属性的方式传递数组是不行,
但我想可能有一些细节我没有想到。

其它方法是什么?我想洗耳恭听.
非常感谢你的回复!
myhfit 2002-10-26
  • 打赏
  • 举报
回复
不应用Let给数组赋值
应做为函数
Public Function XXX(T1() as double) as long
用时应为
dim a() as double
...
XXX(a())
其实有很多方法

Public Function XXX(T1 as variant) as long
variant是可以传入数组的
dim a as variant
a=array()
...
XXX(a)
也可用传入地址的方法
Public Function XXX(T1 as long,lb as long) as long
中间用函数CopyMemory把T1代表的地址按lb的长度复制到一个数组中
比如
redim tmpXXX(lb) as double
copymemory tmpxxx(0),byval t1,lb*8
'注意Double占8个字节
使用时
dim a() as double
XXX(varptr(a(0)),ubound(a)+1)

其实还有其他办法
wdxing 2002-10-26
  • 打赏
  • 举报
回复
您把参数设置为Collection类型,传递collection很好操作的。
siyunying 2002-10-26
  • 打赏
  • 举报
回复
up
edwardpro 2002-10-26
  • 打赏
  • 举报
回复
编一个函数不就可以了?
public function arb()as long()
arb=target()
end function
或者在主程序中放一个模块定义一个public的数组不也可以?
siyunying 2002-10-26
  • 打赏
  • 举报
回复
To zxinlin
感谢你给出问题的关键,把形参设置为Variant。问题解决。
to zhang_1978
你这种做法,在数据个数不是固定的时候,是一个非常好的作法。
我曾做我一个类。为了方便工具条的图标的更改。我就像你这样传
工具条的按钮的名字。在用split函数解析。感觉非常不错。
siyunying 2002-10-25
  • 打赏
  • 举报
回复
To daviddivad:
Get 是得到属性的值
我这样试过不行
Private dblA(3,4) as double
Public Property Let A(byRef dblTemp() as double)
dblA=dblTemp
End Property
编译DLL时,出现错误,"不能给数组赋值"

我就这样改写,
Public Property Let A(byRef dblTemp() as double)
dim i as integer,j as integer
for i=0 to 3
for j=0 to 4
dblA(i,j)=dblTemp(i,j)
next j
next i
End Property
编译通过,但我通过一个工程测试时,
dim clsCal as new clsDLL
dim bb(3,4) as double
clsCal.A=bb
测试工程编译时,出现不能给数组赋值。

你实际使用过给类传数组吗?


holydiablo 2002-10-25
  • 打赏
  • 举报
回复
按地址传送(通上),这种方法的数据会很快,不过我一向认为接口间传数组实在不是好办法
daviddivad 2002-10-25
  • 打赏
  • 举报
回复
写个属性,通过属性来获取

public property get ArrayDbl(byref dblTemp() as double)
'把DBLA(3,4)的内容复制到DBLTEMP中去,就行了
end property

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧