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

跪求这个有关问题的解

2012-01-16 
跪求这个问题的解.VB codeType AAAA1 As IntegerAA2 As IntegerEnd TypeType BBBB1 As AABB2 As String *

跪求这个问题的解.

VB code
Type AA    AA1 As Integer    AA2 As IntegerEnd TypeType BB    BB1 As AA    BB2 As String * 20    BB3 As IntegerEnd TypeFunction S2B(T As BB) As Byte()Dim A() As ByteReDim A(Len(T) - 1)CopyMemory A(0), T, Len(T)S2B = AEnd FunctionFunction B2S(A() As Byte) As BBDim T As BBCopyMemory T, A(0), Len(T)B2S = TEnd Function'这种情况是完全没有问题的.'但是我想在以下那种情况中.Type CC    CC1() As Integer    CC2() As LongEnd TypeType AA    AA1 As Integer    AA2 As IntegerEnd TypeType BB    BB1 As AA    BB2 As String * 20    BB3 As Integer    BB4() As AA    BB5() As CC    BB6(1 to 9) As AA    BB7(1 to 20) As CCEnd Type'问题出现了,无法解决'跪求这个问题的解.'用在发送数据和接收数据的Dim Lem1 As BBDim LemB() As ByteLemB = S2B(Lem1)SendDate LemB


[解决办法]
自定义变量(结构)中的动态数组在使用前必须用redim重新定义。

[解决办法]
这个redim重新定义我也会!在书里看到过的。
[解决办法]
自定义结构中的不定长数组只是一个指针,直接复制不仅不包涵 数据,还会导致还原时的指针错误。
要自己做序列化/反序列化,将成员的数据逐个串起来进行处理。
[解决办法]
因为 VB 写文件操作会自动判断每个成员的类型,然后选用合适的格式保存数据。
而 CopyMemory 是纯内存操作,不管数据的类型。

如果不想自己做序列化/反序列化,读写文件也是一种可行的方案。
[解决办法]
学习一下。。。。
[解决办法]
还是将不定长改为定长方便些。
[解决办法]
在用户自定义数据类型时,如果成员为动态数组,则该成员为指针。在S2B函数中使用了CopyMemory函数,该函数表示从指定地址起复制若干字节到目标地址中,由于数据类型BB包含动态数组,使用CopyMemory时,将只复制动态数组的指针(而不是实际数据),因此,要想S2B结果正确,自定义数据类型不能包含动态数组或不定义字符串。否则,必须如老鸟所说,自己做序列化和反序列化,而不是简单地使用CopyMemory函数。

热点排行