• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

API中VB字符串作参数传递的本质论

发布: 2007-6-21 21:57 | 作者: chenyu5188  | 来源: CSDN  | 查看: 18次 | 进入软件测试论坛讨论

领测软件测试网

下一页 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,说明它具有保护功能,将超过的字符截掉

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网