API中VB字符串作参数传递的本质论
2008-02-23 07:03:14来源:互联网 阅读 ()
1 2 3 4 下一页
问题背景:
前几天在论坛中看到有一个提问的问题,内容是:
模块中的代码:
Option Explicit
Public Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lPBuffer As String, nSize As Long) As Long’声明获取计算机名的API函数
窗体中的代码:
Option Explicit
Private Sub Command1_Click()
Dim computername As String
Dim length As Long
length = 255
str = String(length, 0)
GetComputerName computername, length
Debug.Print computername,
End Sub
以上程序的功能是获取计算机名。
大家看上面API中的lpBuffer这个形参被声明为Byval(传值)方式。那么在调用之后API函数却可以通过computername这个实参传回计算机名,那么形参不是被声明为传值调用方式吗?即形参值的改变不会影响到实参,可是这里调用API函数后却可以通过实参返回值,这是到底是什么原因呢?
相关知识:
大家都知道,VB中没有C语言中的指针类型。C语言中只有字符数据类型,即字符变量只能存放一个字符,而没有字符串变量,它操作字符串是通过字符型指针来实现的,它的特点是通过’\0’来判断字符是否结束的。而VB有字符串变量类型,一种变长,一种是定长的。并且VB字符串具体自动保护功能。
例如:dim str as string * 6
str=”abcdef”
debug.print str’那么将显示abcdef
str=”abcdefghijklmnopq”
debug.print str’还显示abcdef,说明它具有保护功能,将超过的字符截掉
上一篇: 在VB中调用CHM帮助的几种方法
下一篇: VB实现抽象类
1 2 3 4 下一页
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:用VB制作一个简单的MP3播放器
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash