感悟VB细水长流话API(三)

发表于:2007-06-21来源:作者:点击数: 标签:
下一页 1 2 感悟VB细水长流话API(三) 第三话 定长字符串的使用 上一话讲 lstrlen 时我们传递字符串给API时是直接传递的,相当一部分API也是这样。当然在VB中这里面是有秘密的,我们现在还不对其进行讨论,现在我要讲另一个API,它用的是定长字符串。 这是一

下一页 1 2 

   感悟VB细水长流话API(三)

第三话 定长字符串的使用

  上一话讲 lstrlen 时我们传递字符串给API时是直接传递的,相当一部分API也是这样。当然在VB中这里面是有秘密的,我们现在还不对其进行讨论,现在我要讲另一个API,它用的是定长字符串。

  这是一个显示Windows的Temp目录、Windows安装目录以及System目录的路径的程序。这里用到了三个API分别得到这三个目录的路径。

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

  比较一下,可以看到这三个API都用到两个参数,一个是字符串缓存,用来保存得到的路径,另一个是指定该缓存的大小。为什么这里要指定大小呢?我把我的代码贴下来,你看一看。


Private Sub Form_Load()
Dim sPath As String * 260, lLen As Long
lLen = GetTempPath(260, sPath)
Text1 = Left(sPath, lLen)
lLen = GetWindowsDirectory(sPath, 260)
Text2 = Left(sPath, lLen)
lLen = GetSystemDirectory(sPath, 260)
Text3 = Left(sPath, lLen)
End Sub


  我的sPath是让API去赋值的,因此必须指定大小,以避免当缓存比API要填充的字符串还小时出现错误。它们的返回值都是API已经填充了的字符个数。因为定长字符串长度是一定的,所以没被填充的空间仍留着,所以要用left来取出有用的部分。

原文转自:http://www.ltesting.net