首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

怎样用CopyMemory给自定义门类复制数据

2013-01-07 
怎样用CopyMemory给自定义类型复制数据有一个自定义类型Private Type ssasc1 As String * 1ycode(0 To 17,

怎样用CopyMemory给自定义类型复制数据
有一个自定义类型
Private Type ss
  asc1 As String * 1
  ycode(0 To 17, 0 To 22) As Byte
End Type
Dim Yzmcount As Integer,YzmData(1 To 300) As ss

我用
put #1,1,Yzmcount
put #1,,yzmdata
这两句保存到文件后,导入进资源文件。

然后,
dim bb() as byte
bb = LoadResData(101, "CUSTOM")
读出资源文件到数组到bb

再用
CopyMemory ByVal VarPtr(Yzmcount), bb(0), 2
可以读出yzmcount这个变量的值,但是用下面这句却会出错,甚至导致VB都退出。
CopyMemory ByVal (YzmData(1), bb(2), UBound(bb) - 2
这是为什么呢?


[解决办法]
注意字节对齐
[解决办法]
并不是所有结构都适合进行内存Copy
你的做法三个问题:
1、首先结构定义就不成立,一方面,如楼上所说,没有注意4字节对齐,另一方面使用了String,并进行了文件中转,这个问题就变复杂了,定长String,在写入文件时,会进行Unicode To ANIS转换,这种内存数据与文件数据是不同的
2、Copy结构数组,有两种方法,一种byref结构数组首元素的首个item,一种是Byval varptr(数组首元素),你好像哪种也没用?
3、你的Copy长度也不对,一般应该用lenb取结构长度X数组元素个数,当然你的结构定义中使用了定长String,再用文件一中转,加上4字节没对齐,怎么取长度都Copy不了,这条就算我没说。
[解决办法]
我觉得这个会很有难度。
就如楼上说的,不是所有结构体类型都适合用CopyMemory的

热点排行