打印本文 打印本文 关闭窗口 关闭窗口
有关API字符串--API programmer请看之一
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1691  更新时间:2009/4/23 18:58:14  文章录入:mintao  责任编辑:mintao
一个长度为1的BSTR的字符串。该字符串是Unicode格式,所以占用2个字节。

    Asc,AscB和AscW函数

    这些函数就是Chr的反函数。其中,AscB接收一个ANSI BSTR类型的字符串,并返回一个Byte型的该字符串第一个字符的ASCII代码。为了证明返回值确是Byte类型的数据,请看下面的代码:

    Debug.Print VarType(AscB("h")) = vbByte

    输出结果是True。从字面上来看,可能你会认为AscB会接收一个BSTR类型的字符,但是,实际上它只认这个BSTR字符的第一个字节,其它的字节就被忽略掉了。

     Asc函数接收一个BSTR类型的字符串(不是ANSI BSTR),并返回一个该字符串第一个字符的Unicode代码。

    Null字符串和Null字符

    Visual Basic允许Null值的BSTR类型字符串。请看下面代码:

    Dim s As String

    s = vbNullString

    Debug.Print VarPtr(s) ‘有关这两个函数,接下来马上介绍。

    Debug.Print StrPtr(s)

    输出结果是:

    1243948

    0

    这说明,一个Null值的BSTR字符串仅仅是一个指向内容为0的字符指针。在Win32和Visual C++中,这种字符串叫做空指针。让我们再来看看vbNullString和vbNullChar的区别。vbNullChar并不是指针,它是一个值为0的Unicode字符。

    请大家不要把一个值为Null的BSTR和一个空BSTR搞混了。请看下面代码:

    Dim s As String

    Dim t As String

    s = vbNullString

    t = ""

    空BSTR字符串t是一个指向非空内存地址的指针。在那个地址保存的是空BSTR字符串的终止符。而且,它前面的那4个保留字节中保存的该字符串的长度信息为0。

    VarPtr和StrPtr函数

    在微软的文档里并没有VarPtr和StrPtr函数的描述,但它们是非常有用的。特别是VarPtr函数。

    请看,如果参数var为有效变量的话,那么,

    VarPtr(var)

    返回的是变量的长整型地址。如果str是一个BSTR字符串变量,那么:

    StrPtr(str)

    返回的是BSTR字符串指针指向的Unicode字符串的首地址。

    让我们看下图:

    Figure 6-5. A BSTR

    如果代码如下:

    Dim str As String

    str = "help"

    注意,变量str在内存中的地址是aaaa,str保存的内容是字符串的首地址xxxx.。

    请看:

    VarPtr = aaaa

    StrPtr = xxxx

    请再运行以下程序:

    Dim lng As Long

    Dim i As Integer

    Dim s As String

    Dim b(1 To 10) As Byte

    Dim sp As Long, vp As Long

    s = "help"

    sp = StrPtr(s ) ’sp是字符串首地址即字符h在内存中的地址xxxx

    Debug.Print "StrPtr:" & sp

    vp = VarPtr(s) ‘vp是sp的保存的内容xxxx在内存中的地址aaaa

    Debug.Print "VarPtr:" & vp

    CopyMemory lng, ByVal vp, 4 ‘将长整型指针vp指向的内容xxxx拷贝到长整型变量lng,并作比较。

    Debug.Print lng = sp

    CopyMemory b(1), ByVal sp, 10 ‘将sp保存的地址的实际内容拷贝给byte型数组b(),并输出。

    For i = 1 To 10

        Debug.Print b(i)

    Next

    输出结果为:

    StrPtr:1836612

    VarPtr:1243988

    True

    104  0  101  0   108   0   112   0   0   0

    在此我们清楚地看到,在内存中BSTR类型的字符串是以Unicode格式保存的。

    请在这几行代码:

    sp = StrPtr(s)

    Debug.Print "StrPtr:" & sp

    后加入以下几行代码:

    Dim ct As Long

    CopyMemory ct, ByVal sp - 4, 4

    Debug.Print "Length field: " & ct

    运行后可以得到这条输出结果:

    Length field: 8

    在此我们清楚地看到,这四个字节的保留字保存的是字符串的字节数,而不是字符数。

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口