转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
有关API字符串--API programmer请看之一         ★★★★

有关API字符串--API programmer请看之一

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1692 更新时间:2009/4/23 18:58:14
一个长度为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] 


[VB.NET程序]有关API字符串--API programmer请看之二  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台