奇怪的数据类型Variant,关于函数参数传递有关问题,
奇怪的数据类型Variant,关于函数参数传递问题,高手请进!!
本人在做一个数据采集软件,采集后的数据放入一数组中,传入下面的一类的成员函数存储.
成员函数
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语句转换,请问如何解决??
------解决方案--------------------
为什么要Public Sub SaveData(vatDataStream As Variant)?直接传个数组不就行了?
Public Sub SaveData(vatDataStream() As Integer)
或者传这个数组的地址,然后在函数中再处理
------解决方案--------------------
ReDim vatDataStream (100, 10000)As Integer
改成
ReDim preserve vatDataStream (100, 10000)As Integer
我没有测试,不知道是否可行
------解决方案--------------------
楼主直接用ReDim 那还传参数过来干吗?
楼上的说得对,用ReDim Preserve
其次Variant本身就是在数组这方面不好控制,因为不容易知道字节长度。
还有虽然VB默认传参是传地址,但保险起见还是把ByRef加上吧!
------解决方案--------------------
反正最后是要写入文件的,为什么不用一个临时文件存放一下,入库时从临时文件读呢?
------解决方案--------------------
Public Sub SaveData(vatDataStream As Variant)
ReDim vatDataStream (100, 10000)As Integer
End Sub
ReDim 把内存里面的所有数据都clear了!你写进去的恐怕都是0吧
------解决方案--------------------
ReDim vatDataStream () 中间加一个prsver
建议不要用Variant.
或者你可以新定义一个组,然后通过API:CopyMemory()复制进去
本人在做一个数据采集软件,采集后的数据放入一数组中,传入下面的一类的成员函数存储.
成员函数
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语句转换,请问如何解决??
------解决方案--------------------
为什么要Public Sub SaveData(vatDataStream As Variant)?直接传个数组不就行了?
Public Sub SaveData(vatDataStream() As Integer)
或者传这个数组的地址,然后在函数中再处理
------解决方案--------------------
ReDim vatDataStream (100, 10000)As Integer
改成
ReDim preserve vatDataStream (100, 10000)As Integer
我没有测试,不知道是否可行
------解决方案--------------------
楼主直接用ReDim 那还传参数过来干吗?
楼上的说得对,用ReDim Preserve
其次Variant本身就是在数组这方面不好控制,因为不容易知道字节长度。
还有虽然VB默认传参是传地址,但保险起见还是把ByRef加上吧!
------解决方案--------------------
反正最后是要写入文件的,为什么不用一个临时文件存放一下,入库时从临时文件读呢?
------解决方案--------------------
Public Sub SaveData(vatDataStream As Variant)
ReDim vatDataStream (100, 10000)As Integer
End Sub
ReDim 把内存里面的所有数据都clear了!你写进去的恐怕都是0吧
------解决方案--------------------
ReDim vatDataStream () 中间加一个prsver
建议不要用Variant.
或者你可以新定义一个组,然后通过API:CopyMemory()复制进去