问题背景: 前几天在论坛中看到有一个提问的问题,内容是: 模块中的代码: 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,说明它具有保护功能,将超过的字符截掉
|
正在阅读:API中VB字符串作参数传递的本质论API中VB字符串作参数传递的本质论
2004-04-27 10:02
出处:CSDN
责任编辑:linjixiong
键盘也能翻页,试试“← →”键