欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
感悟VB細水長(cháng)流話(huà)API(三)
userphoto

2023.01.02 寧夏

關(guān)注

第三話(huà) 定長(cháng)字符串的使用

  上一話(huà)講 lstrlen 時(shí)我們傳遞字符串給API時(shí)是直接傳遞的,相當一部分API也是這樣。當然在VB中這里面是有秘密的,我們現在還不對其進(jìn)行討論,現在我要講另一個(gè)API,它用的是定長(cháng)字符串。
  這是一個(gè)顯示W(wǎng)indows的Temp目錄、Windows安裝目錄以及System目錄的路徑的程序。這里用到了三個(gè)API分別得到這三個(gè)目錄的路徑。

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

  比較一下,可以看到這三個(gè)API都用到兩個(gè)參數,一個(gè)是字符串緩存,用來(lái)保存得到的路徑,另一個(gè)是指定該緩存的大小。為什么這里要指定大小呢?我把我的代碼貼下來(lái),你看一看。

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要填充的字符串還小時(shí)出現錯誤。它們的返回值都是API已經(jīng)填充了的字符個(gè)數。因為定長(cháng)字符串長(cháng)度是一定的,所以沒(méi)被填充的空間仍留著(zhù),所以要用left來(lái)取出有用的部分。

  我在現在講這個(gè)例子除了它實(shí)用簡(jiǎn)單,還因為我想讓你知道定義長(cháng)字符串在A(yíng)PI中的應用,而且這里有個(gè)VB的知識要跟大家講。當我們定義一個(gè)變長(cháng)的字符串變量時(shí),VB并不會(huì )像其他變量一樣馬上為它分配內存,而是當賦值給它時(shí)才分配合適大小的內存來(lái)存放。
  但是API并不會(huì )像VB一樣為你的變量分配內存并賦值,它只是知道你想要得到一個(gè)字符串,那么它就給你,至于你的變量裝不裝得下,那是你的事。定長(cháng)的字符在定義時(shí),由于已經(jīng)指定了大小,所以VB就同時(shí)分配了內存給它,所以在使用API填充一個(gè)字符串變量時(shí)就要用定長(cháng)字符串并指定字符的大小了。

  但是,是不是定義時(shí)是變長(cháng)的字符串變量就無(wú)法用來(lái)讓API填充呢?其實(shí)是有辦法的,就是事先讓VB為它分配好足夠的內存??聪旅?

Dim sPath As String
sPath=Space(260)
或者
sPath=String(260,0)

  用這段代碼來(lái)代替前面定長(cháng)字符串變量的聲明,得到的結果是一樣的。

  Space(260)把260個(gè)空格賦給了sPath變長(cháng)字符串變量,因此VB此時(shí)為它分配了可容納260個(gè)空格的內存,而String(260,0)則把260個(gè)NULL字符(ASCII碼為0的字符,在A(yíng)PI中多數代表字符串的結尾)賦給sPath,它同樣因此而得到260個(gè)字節的內存空間。當然你也可以用 String(260," "),讓空格來(lái)填充這個(gè)空間,效果是一樣的。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
如何使用 Unicode 版和 Ansi 版 API – 中文
在VB中使用API函數詳解
VB 字節數組和字符串的轉換問(wèn)題 (String<>Byte)
VB與INI文件
VB中String的用法及原理
怎樣才能返回一個(gè)PChar類(lèi)型從DLL函數的VB6應用程序,而不用擔心崩潰或內存泄漏?
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久