奇怪的数据类型Variant,关于函数参数传递问题,高手请进!!

ediex 2007-01-11 06:25:23
本人在做一个数据采集软件,采集后的数据放入一数组中,传入下面的一类的成员函数存储.


成员函数
Public Sub SaveData(vatDataStream As Variant)
ReDim vatDataStream (100, 10000)As Integer
End Sub
入口参数vatDataStream 为一二维数组,数据量很大,可能达到好几百M.
传入后重新定义为integer型.

然后写入文件,代码如下

hdlFile = FreeFile()
Open FilePath For Binary Access Write As hdlFile

i = UBound(vatDataStream, 1)
j = UBound(vatDataStream, 2)
Put hdlFile, , i
Put hdlFile, , j
Put hdlFile, , intArrayCov

Close hdlFile

打开二进制文件后,发现写入的文件和原数组不一样.


后来我用for语句把vatDataStream 转换到一个新定义的Integer数组后,写入的文件和原数组一样

但因为数组很大不想用for语句转换,请问如何解决??
...全文
332 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
WM_JAWIN 2007-01-12
  • 打赏
  • 举报
回复
ReDim vatDataStream () 中间加一个prsver
建议不要用Variant.
或者你可以新定义一个组,然后通过API:CopyMemory()复制进去
韧恒 2007-01-12
  • 打赏
  • 举报
回复
为什么要Public Sub SaveData(vatDataStream As Variant)?直接传个数组不就行了?

Public Sub SaveData(vatDataStream() As Integer)


或者传这个数组的地址,然后在函数中再处理
ZOU_SEAFARER 2007-01-12
  • 打赏
  • 举报
回复
Public Sub SaveData(vatDataStream As Variant)
ReDim vatDataStream (100, 10000)As Integer
End Sub

ReDim 把内存里面的所有数据都clear了!你写进去的恐怕都是0吧
guyehanxinlei 2007-01-12
  • 打赏
  • 举报
回复
反正最后是要写入文件的,为什么不用一个临时文件存放一下,入库时从临时文件读呢?
ediex 2007-01-12
  • 打赏
  • 举报
回复
传数组是不行的,我试了很多次,
chanfengsr 2007-01-12
  • 打赏
  • 举报
回复
楼主直接用ReDim 那还传参数过来干吗?
楼上的说得对,用ReDim Preserve

其次Variant本身就是在数组这方面不好控制,因为不容易知道字节长度。

还有虽然VB默认传参是传地址,但保险起见还是把ByRef加上吧!
yachong 2007-01-12
  • 打赏
  • 举报
回复
ReDim vatDataStream (100, 10000)As Integer
改成
ReDim preserve vatDataStream (100, 10000)As Integer

我没有测试,不知道是否可行

7,762

社区成员

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

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