神奇的*號 在使用 VB 編程的過程中,我想沒有人不會用到定義一個字符串變量的,當然要抬扛就沒折了。而在 VB 中定義一個字符串有如下兩種方法: 1 、" name="description" />

神奇的*號

發表于:2007-05-25來源:作者:點擊數: 標簽:神奇宋體
MI LY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> 神奇的*號 在使用 VB 編程的過程中,我想沒有人不會用到定義一個字符串變量的,當然要抬扛就沒折了。而在 VB 中定義一個字符串有如下兩種方法: 1 、
 

                         MILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">   神奇的*號


在使用VB編程的過程中,我想沒有人不會用到定義一個字符串變量的,當然要抬扛就沒折了。而在VB中定義一個字符串有如下兩種方法:


1、dim s as string


2、dim s as string *100


其中第一種方法我想是用的最多了,在這里不說,因為文章的標題的“神奇的*號”,所以,我要說是第二種聲明方法。第二種方法我想做VB程序的也沒有不知道這是什么意思的,就是聲明一個長度為100的字符串。這里的*就是表明聲明一個定長的字符串。


在大多VB書籍中,講到這里只是說明加了*號表明是一個定長字符串,不加表明是變長的,就不再說其它的了,最多有的書再講一點,說變長字符串最多可包含大約21億(231次方)個字符,定長字符串可包含1到大約64K216次方)個字符,這是我看到講的最深的書了。在一般的使用過程中,這兩種方法也沒什么差別,只要長度夠用,兩種均可。但我要說的是在這里,這個*有時很神奇!因為用第二種聲明方法聲明的字符串,在當做參數用時就體現出了它的神奇。在應用時,有時需要按引用ByRef(在C/C++中是指針),此時如果還按第一種聲明方法有時出現災難性的內存錯誤!而改用第二種方法,就可以風平浪靜,一切正常!


說到這里我想已經可以看出*之神奇所在了,那就是可以當做指針用。當然,在VB里是沒有指針這個概念的,頂多是引用了(不要說還有取地址的StrPtr,ObjPtr函數呀,又抬扛了不是?)。所以在VBVC進行混合開發時經常會遇到這樣的問題,因為與VC打交道就免不了使用指針,做過VC的一定知道其中有不少LPTSTR,LPSTR等諸如此類的聲明。要在VB中對應這類聲明,最好用第二種方法,這樣可省去很多麻煩。


下面舉個簡單又常用的例子。在VB程序中讀取INI文件中的字符串。當然Windows API有現成的函數:GetPrivateProfileString,而用Visual Studio中的API View取過來的聲明是這樣的:


Private(Public) Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long


好了,現在一INI文件定義如下:


[Test]


Str=pursuer


則要讀取Str的內容,這一段程序就可以輕松搞定!代碼如下


Dim lpString as String *10


GetPrivateProfileString "Test", "Str1", "", lpString, 10, "c:\t.ini"


MsgBox lpString


這時如果這樣:


Dim lpString as String *


GetPrivateProfileString "Test", "Str1", "", lpString, 10, "c:\t.ini"


MsgBox lpString


結果……哈哈,你自己試試看吧!


這時蓋茨的操作系統會說你的程序很粗魯,并以很粗魯的方式告訴你,程序出錯了!哈哈…..


這只是個簡單的例子,如果用VBVC混合開發,如VCDLL文件在VB中調用,這樣可以解決很多問題并且很方便。例如現有一VC做的DLLHandle.dll) 文件,其中有一函數其原型是這樣的:


DWORD GetUserName(LPTSTR lpUserNameBuff)


此函數是用來取用戶名的,并將取到的用戶名放入lpUserNameBuff中,并返回取到的字節數。要在VB 中使用該函數,先聲明一下:


 


Public Declare Function GetUserName Lib "Handle.dll" (ByVal lpUserNamebuff As String) As Long


 


好了,可以這樣用:


Dim lpUserName as String * 16


GetUserName lpUserName


MsgBox lpUserName


同樣,如果你這樣:


Dim lpUserName as String


GetUserName(lpUserName)


MsgBox lpUserName


……….


可要后果自負呀!哈哈….


 


好了,這個*號是不是很神奇?趕緊動手試試吧!

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97