+ -
当前位置:首页 → 问答吧 → 自定义数据类型,怎样获取自己的长度?

自定义数据类型,怎样获取自己的长度?

时间:2011-10-29

来源:互联网

以下是在模块内:

VB code

Public Type SZDataHead
    Flag   As String  '变长的字串
    lSize  As Long    '此结构长度
End Type



我想用 结构中的lSize来保存 SZDataHead 自己的大小,怎么获得呢?
用 Len(G_DataHead)获得不了哦~

下面我的测试例子,不成功!
VB code

'写数据
Private Sub Command1_Click()
    Dim G_DataHead      As SZDataHead

      G_DataHead.Flag = Text1.Text
      G_DataHead.lSize = Len(G_DataHead)
      
      Open App.Path & "\1.dat" For Binary As #1
            Put #1, , G_DataHead
            Put #1, , Text2.Text
      Close #1
      Label1.Caption = G_DataHead.lSize
End Sub
'读数据
Private Sub Command2_Click()
     Dim s As String
     Dim G_DataHead      As SZDataHead
     Open App.Path & "\1.dat " For Binary As #1
     
        Text1 = ""
        Text2 = ""
        Get #1, , G_DataHead
        Seek #1, G_DataHead.lSize + 1
        Get #1, , s
        Text2 = s
        Text1 = G_DataHead.Flag
    Close #1
    Label1.Caption = G_DataHead.lSize
End Sub





但是我确实是见过这样的数据类型,可惜只有读取的源码,没有写入的源码
VB code

'解析.lnk文件的类
'.........
'文件位置信息段
Private Type tFileLocationInfoHead
    lSize As Long '此段长度
    lFirstOffset As Long '头结构长度,&H1C
    eFlag As eLocationFlag '文件在哪些卷有效
    lVolumeOffset As Long '本地卷偏移,&H1C
    lBasePathOffset As Long '本地路径偏移
    lNetworkOffset As Long '网络卷偏移
    lRemainingPathOffset As Long '剩余路径偏移
    '如果文件在本地卷,那么文件名为:本地路径+剩余路径
    '如果文件在网络卷,那么文件名为:网络卷信息中的共享名+剩余路径
End Type
Private Type tFileLocationVolume
    lSize As Long '此结构长度
    eVolType As eVolumeType '卷类型
    lVolSerialNumber As Long '卷序列号
    lVolNameOffset As Long '&H10
    sVolName As String '卷标
End Type
Private Type tFileLocationNetwork
    lSize As Long '此结构长度
    lUnknown1 As Long '&H2
    lNetNameOffset As Long '&H14
    lUnknown2 As Long '&H0
    lUnknown3 As Long '&H20000
    sNetName As String '网络共享名
End Type
'........


作者: shuzhi920354   发布时间: 2011-10-29

len可以的,要加个头尾什么的,具体数字忘记了。

作者: patrickkong   发布时间: 2011-10-29

MSDN 上vb帮助中关于Len的解释,最后一段是这样的:
注意 当在用户自定义数据类型中使用变长字符串时,Len 可能不能确定实际存储所需的字节数目。
Len貌似不行

作者: shuzhi920354   发布时间: 2011-10-29

卷标、路径等是有长度上限的,所以可以
你的变长字符串纯粹没有一个确定的长度上限,叫人家怎么统计你的长度……

作者: alifriend   发布时间: 2011-10-29

引用 3 楼 alifriend 的回复:
卷标、路径等是有长度上限的,所以可以
你的变长字符串纯粹没有一个确定的长度上限,叫人家怎么统计你的长度……

变长字符串不能实时统计吗?

作者: shuzhi920354   发布时间: 2011-10-29