一次实验,弄明白了VB6中的字符串的存储格式

本文通过实验揭示了VB6中字符串的存储方式,详细解释了StrPtr()和VarPtr()函数的用法,以及BSTR字符串的UNICODE编码特点。通过对内存的观察,解析了字符串长度和内容的存储位置,帮助读者清晰理解VB6字符串内存布局。
摘要由CSDN通过智能技术生成

    虽然看过《老兵新传》《VisualBasic win32编程》中介绍VB6字符串的内容,但依旧对VB6中的字符串如何存储不十分清楚,不像对C语言中的字符串那样,在头脑中有一个清晰的轮廓。同时对varptr(),strptr()的理解也只限于书上的那些例子。直到有一天,突然灵光一闪,动手写了下面的程序,当程序执行的结果出现时,我也终于恍然大悟。

Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Sub main()
    Dim strA As String
    strA = "BSTR"
    
    Dim addrofStr As Long
    addrofStr = StrPtr(strA)
    Debug.Print "StrPtr(strA):" & addrofStr
    
    Dim llength As Long
    addrofStr = addrofStr - 4
    CopyMemory llength, ByVal addrofStr, 4 'llength中应为字符串包含的字节数
    Debug.Print "length of bytes:" & llength
    
    Dim addrofVar As Long
    addrofVar = VarPtr(strA)
    Debug.Print "VarPtr(strA):" & addrofVar
    
    Dim addrofTest As Long
    CopyMemory addrofTest, ByVal addrofVar, 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kingdragonfly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值