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

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2949 更新时间:2009/4/23 18:58:16
思考一下,第一个字符d的Unicode代码是00 64(十六进制),而在内存保存为64 00。StrConv将每一个字符转换为Unicode格式,结果就是00 64 00 00(在内存中则为64 00 00 00)。效果与在原来的每个Unicode字符后再加一个Unicode的空字节一样。

在将这个膨胀了的Unicode字符串传递到CharUpperW之前,Visual Basic欲把它转换为ANSI,于是它就变回原来的Unicode格式。于是CharUpperW就理解了传递进来的Unicode字符串,成功地将它改为大写。当转换为大写的Unicode字符串从CharUpperW返回的时候,Visual Basic又欲将它转换为Unicode,于是它又变为那种膨胀了的“Unicode“字符串。

 

 

 

 

   

字符串和Byte数组

 

Byte数组理所当然地就是成员是Byte类型的数组,例如:

 

Dim b(1 to 100) As Byte

 

我们可以使用VarPtr函数得到这个Byte类型的数组指针。

 

Dim lpsz As Long

lpsz = VarPtr(b(1)) 

 

数组第一个成员的地址就是数组的地址。

记得我们说过一个LPSTR就是一个指向空字节结尾的字符数组。现在我们把数组全部赋值为空:

 

For i = 1 To 100

b(i) = 0

Next

 

(虽然Visual Basic也会自动帮你初始化,但是老是依赖它的这种初始化功能却不是一个良好的编程习惯。)

 

在Byte数组和BSTR字符串间相互转化

 

要将一个BSTR字符串转化为Byte数组,我们有两种不同的方法。Visual Basic风格的方法如下:

 

Dim s As String

s = "help"

 

Dim b(1 To 8) As Byte

For i = 1 To 8

b(i) = AscB(MidB(s, i))

Next

 

另一种C++风格的方法可以是:

 

s = "help"

Dim b(1 To 8) As Byte

CopyMemory b(1), ByVal StrPtr(s), LenB(s)

 

不管是哪种方法,我们都得到:

 

104  0  101  0  108  0  112  0

 

从上可见,在每一个Unicode格式的字符串中,每个字符都是颠倒保存的。

另一方面,如果想把一个Byte数组转化为一个BSTR字符串,Visual Basic提供了几个函数帮助我们做到这一点。如果b是一个Unicode格式的Byte数组,那么我们就可以直接在代码中这样写:

 

Dim t As String

t = b

 

而如果是ANSI格式的Byte数组就这样写:

 

Dim t As String

t = StrConv(b, vbUnicode)

   

在BSTR和LPTSTR间进行转换

现在让我们来看一下如何在BSTR和LPTSTR间进行转换。

 

从BSTR到LPWSTR

将一个BSTR字符串转换为仿Unicode的Byte数组在理论上是很容易的。因为BSTR所指向的字符数组本来就是Unicode格式的。我们只要把字符一个个拷贝过去就行了。以下是一个将BSTR转换为LPWSTR的函数:

Function BSTRtoLPWSTR(sBSTR As String, b() As Byte, lpwsz As Long) As Long

   

'''' Input: a nonempty BSTR string

'''' Input: **undimensioned** byte array b()

'''' Output: Fills byte array b() with Unicode char string from sBSTR

'''' Output: Fills lpwsz with a pointer to b() array

'''' Returns byte count, not including terminating 2-byte Unicode null character

'''' Original BSTR is not affected

   

Dim cBytes As Long

   

cBytes = LenB(sBSTR)

   

'''' ReDim array, with space for terminating null

ReDim b(1 To cBytes + 2) As Byte

   

'''' Point to BSTR char array

上一页  [1] [2] [3] [4] [5]  下一页


[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……
    咸宁网络警察报警平台