zoukankan      html  css  js  c++  java
  • (转)不得不了解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

  • 相关阅读:
    Best Time to Buy and Sell Stock
    Remove Nth Node From End of List
    Unique Paths
    Swap Nodes in Pairs
    Convert Sorted Array to Binary Search Tree
    Populating Next Right Pointers in Each Node
    Maximum Subarray
    Climbing Stairs
    Unique Binary Search Trees
    Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/yxsylyh/p/vbCallByName.html
Copyright © 2011-2022 走看看