打印本文 打印本文 关闭窗口 关闭窗口
API中VB字符串作参数传递的本质论
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1652  更新时间:2009/4/23 18:59:52  文章录入:mintao  责任编辑:mintao

   Debug.Print str

   Debug.Print VarPtr(str)

   Debug.Print StrPtr(str), Len(str), length

End Sub

 

在立即窗口中可以看到运行结果。字符串变量的地址与字符串的地址不同。

还可以看到字符串变量str与str1的地址不同,而且字符串地址也不同,这说明在进行赋值操作,并不是将字符的首地址赋给str1而是在内存中另开一空间用来存放字符串。而在C语言内则可以使多个字符型指针变量指向同一个字符串的首地址。

当将API中的ByVal lpBuffer As String传值方式改为:ByRef lpBuffer As String传址方式时,运行程序中出错,VB编程环境将崩溃。

出错图:

因为传址时将变量本身的地址传给了API,并没有将字符串的首地址传给API,所以API在修改数据时造成访问错误。

总结

不能用传址方式来调用API,如果用传址方式的话那么传递的是指向指针的指针,API将不能返回数据,并且造成访问数据出错,所以需要用ByVal传递字符串指针。

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口