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


    不得不了解VB中的CallByName

    作者:朱先忠 来源:博客 2009年3月12日

      一、缘由

      这个问题来自于我前段时间主持的一个山东省一级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函数的威力吗?


    作者:海阔天

    欢迎转载!转载请注明出处:

    www.cnblogs.com/yxsylyh

  • 相关阅读:
    基于Adaboost的人脸检测算法
    操作系统笔试题及答案
    eclipse Maven plugin 配置
    网站服务管理系统系列教程之五
    2017第4周日
    2017春节~人生智慧箴言
    2017年初夕
    2017农历二十九
    王国维收藏真伪
    2017第3周二假期里该做的事
  • 原文地址:https://www.cnblogs.com/yxsylyh/p/vbCallByName.html
Copyright © 2020-2023  润新知