(转)不得不了解VB中的CallByName

不得不了解VB中的CallByName

作者:朱先忠 来源:博客 2009年3月12日
<!-- Google广告代码 -->
<script type="text/javascript"><!-- google_ad_client = "pub-7544158037619893"; /* 250x250, 创建于 08-6-3 */ google_ad_slot = "3368625097"; google_ad_width = 250; google_ad_height = 250; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><script src="http://pagead2.googlesyndication.com/pagead/expansion_embed.js"></script><script src="http://googleads.g.doubleclick.net/pagead/test_domain.js"></script><script src="http://pagead2.googlesyndication.com/pagead/render_ads.js"></script><script>google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);</script>

  一、缘由

  这个问题来自于我前段时间主持的一个山东省一级OFFICE模拟考试项目(VB6+OFFICE 2003)。

  二、问题描述

  (1)我有一批VB过程,如下所示:

--------------------------------------------------------------------------------
Public Sub Word01(file1 As String)
Public Sub Word02(file1 As String)
Public Sub Word03(file1 As String)
......

--------------------------------------------------------------------------------

  上述过程的作用分别是进行第1套、第2套......试题的WORD部分的评分。

  (2)我想实现在最后的评分过程中,通过一处调用(或尽可能少的语句)即实现对上面第N套试题的WORD部分的评分(注意,上面的过程中的参数,即文件名,事先存在于某一个模块文件的一个全局字符串数组中)。

  三、找到答案--借助于函数CallByName

  我的解决办法如下:

--------------------------------------------------------------------------------
   Dim oWord As clsWord
    Set Word = New clsWord
              
CallByName oWord, "Word" & Mid(modMain.Word(iCurrentNumber), 5, 2), VbMethod, sSystemPath & "\" & Word(iCurrentNumber)


--------------------------------------------------------------------------------

  四、函数CallByName解释

  根据MSDN,CallByName 函数是VB6新引入的函数,它支持在运行时用来获取对象的属性,设置属性或调用方法。其具体的定义如下:

--------------------------------------------------------------------------------
Public Function CallByName( _
   ByVal ObjectRef As System.Object, _
   ByVal ProcName As String, _
   ByVal UseCallType As CallType, _
   ByVal Args() As Object _
) As Object
参数
ObjectRef
必选。Object。指向公开属性或方法的对象的指针。

ProcName
必选。String。包含对象的属性名或方法名的字符串表达式。

UseCallType
必选。CallType 枚举类型的枚举成员,表示所调用过程的类型。CallType 的值可以是 Method、Get 或 Set。

Args
可选。ParamArray。参数数组,包含要传递给所调用的属性和方法的参数。

--------------------------------------------------------------------------------

  从MSDN中,你能够找到有关CallByName 函数的基本应用举例,但是如果你不细心体会或在实战中经历,却有可能很难意识到此函数的强大威力。

  但是,上面说得清楚,必须是调用对象中的方法、属性等。于是,不得已,我便把我的上面诸多VB方法统统放入到一个VB类clsWord中。

  于是,最上面代码的前两行是创建上述类的一个实例,而最后一句则是调用此对象实例的方法,如下:

--------------------------------------------------------------------------------
CallByName oWord, "Word" & Mid(modMain.Word(iCurrentNumber), 5, 2), VbMethod, sSystemPath & "\" & Word(iCurrentNumber)

--------------------------------------------------------------------------------

  上述调用中,传递给对象实例的参数都可以动态确定,这不正体现了CallByName函数的威力吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值