分享
 
 
 

神奇的*号

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

神奇的*号

在使用VB编程的过程中,我想没有人不会用到定义一个字符串变量的,当然要抬扛就没折了。而在VB中定义一个字符串有如下两种方法:

1、dim s as string

2、dim s as string *100

其中第一种方法我想是用的最多了,在这里不说,因为文章的标题的“神奇的*号”,所以,我要说是第二种声明方法。第二种方法我想做VB程序的也没有不知道这是什么意思的,就是声明一个长度为100的字符串。这里的*就是表明声明一个定长的字符串。

在大多VB书籍中,讲到这里只是说明加了*号表明是一个定长字符串,不加表明是变长的,就不再说其它的了,最多有的书再讲一点,说变长字符串最多可包含大约21亿(2的31次方)个字符,定长字符串可包含1到大约64K(2的16次方)个字符,这是我看到讲的最深的书了。在一般的使用过程中,这两种方法也没什么差别,只要长度够用,两种均可。但我要说的是在这里,这个*有时很神奇!因为用第二种声明方法声明的字符串,在当做参数用时就体现出了它的神奇。在应用时,有时需要按引用ByRef(在C/C++中是指针),此时如果还按第一种声明方法有时出现灾难性的内存错误!而改用第二种方法,就可以风平浪静,一切正常!

说到这里我想已经可以看出*之神奇所在了,那就是可以当做指针用。当然,在VB里是没有指针这个概念的,顶多是引用了(不要说还有取地址的StrPtr,ObjPtr函数呀,又抬扛了不是?)。所以在VB和VC进行混合开发时经常会遇到这样的问题,因为与VC打交道就免不了使用指针,做过VC的一定知道其中有不少LPTSTR,LPSTR等诸如此类的声明。要在VB中对应这类声明,最好用第二种方法,这样可省去很多麻烦。

下面举个简单又常用的例子。在VB程序中读取INI文件中的字符串。当然Windows API有现成的函数:GetPrivateProfileString,而用Visual Studio中的APIView取过来的声明是这样的:

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

结果……哈哈,你自己试试看吧!

这时盖茨的操作系统会说你的程序很粗鲁,并以很粗鲁的方式告诉你,程序出错了!哈哈…..

这只是个简单的例子,如果用VB和VC混合开发,如VC做DLL文件在VB中调用,这样可以解决很多问题并且很方便。例如现有一VC做的DLL(Handle.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

……….

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

好了,这个*号是不是很神奇?赶紧动手试试吧!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有