没用过VB,请教个简单问题----COM接口函数的参数没有类型,怎么回事?

ERRR 2008-05-27 03:46:53
我现在着急用vb开发一个动态库,可是vb一点都不会,赶鸭子上架了:(
需要引用一个组件的函数,查看该函数原形如下:
Function PutData(RecordNum As Long, vFieldData, nNumFields As Long) As Boolean

我用如下方式调用该函数:

Dim w As Variant
Dim bb As Boolean
w = 2008
bb = DataPipe.PutData(1, v, 12)

结果该组件老是提示我下标出界,为何呢?函数原形中 vFieldData 参数是Variant类型吗?还是要传递数组啊?看起来怎么没有定义啊?
请求帮助。。。
...全文
66 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
supergreenbean 2008-05-28
  • 打赏
  • 举报
回复
改成这样还出界么

bb = DataPipe.PutData(1, v, 2)
ERRR 2008-05-28
  • 打赏
  • 举报
回复
楼上的谢谢!
暂没有文档,只能试着来
不知道vFieldData是一个参数还是数组,我觉得如果vFiedData是参数,那么最后一个参数nNumFields 传递的是字段的序号;如果vFieldData是数组,那么nNumFields 应传递数组大小。
这个没有声明类型的vFieldData真让人难受,vb里面不论传递单个参数还是数组都不需要声明吗?

我做了这样的测试:

Dim w As Variant
Dim bb As Boolean
w = 2008
bb = DataPipe.PutData(1, w, 12)


错误提示是 类型不匹配


Dim bb As Boolean
Dim v(12) As Variant

For i = 0 To 12
v(i) = 20.8
Next

bb = DataPipe.PutData(1, v, 12)


错误提示是 下标出界

那么请经验丰富的朋友帮我确认一下,这个函数vFieldData应该传递数组,nNumFields 应传递数组大小吗?


CathySun118 2008-05-28
  • 打赏
  • 举报
回复
看看接口说明吧,别人是不知道vFieldData是什么类型的
三楼の郎 2008-05-28
  • 打赏
  • 举报
回复
Function PutData(RecordNum As Long, vFieldData, nNumFields As Long) As Boolean
从参数名称来分析的话,recordnum应该是记录的数量,nNumFields应该是每一个记录中的元素的数量,vFieldData可能是一个二维数组或是一个集合(collection)对象,也可能是数组和集合(collection)对象的混合体,不过估计是二维数组的可能性大一些,因为如果是集合(collection)对象就不需要传递元素的数量,可以直接用collection的count属性取得。

如果是二维数组你可以参考以下代码进行测试:

Dim bb As Boolean
Dim v() As Variant
dim w() as Variant

v=array(20.8,20.8,20.8,20.8,20.8,20.8,20.8,20.8,20.8,20.8,20.8,20.8)
w=array(v)

bb = DataPipe.PutData(1, w, 12)

说明:w是一个数组,其成员由V数组构成,其中1表示w数组的成员数量,12表示v数组的成员数量。
ERRR 2008-05-28
  • 打赏
  • 举报
回复
是的,仍然提示越界,改成bb = DataPipe.PutData(1, v, 1)也是这样
不解阿
supergreenbean 2008-05-27
  • 打赏
  • 举报
回复
你没有文档的么
照你的调用和你的说法来看,如果vFieldData是个数组,那它至少应该是个具有12个元素的数组
ERRR 2008-05-27
  • 打赏
  • 举报
回复
笔误
bb = DataPipe.PutData(1, w, 12)

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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