不得不了解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函数的威力吗?
分享到:
相关推荐
通过CallByName轻松实现对属性、方法的变量引用,不必理解反射等抽象概念。
VB代码与WebBrowser控制中的HTML代码,互相控制的例子。 点VB中的按钮,改变网页的显示样式...点网页中的按钮,修改VB中控件的属性,或调用VB中的函数。这只是一个如何实现的示例,没有什么强大功能,代码有中文说明。
调用函数vb程序
在VB中实现将字符串转换成变量名,提供了两种。主要使用Contrl和callbyname ……
vb.net常用函数 Abs(number) 取得数值的绝对值。 Asc(String) 取得字符串表达式的第一个字符ASCII 码。 Atn(number) 取得一个角度的反正切值。 CallByName (object, procname, usecalltype,[args()]) 执行一个对象的...
1.动态调用类方法,模拟VB中的CallByName 2.附带了C#和VB的代码 3.主要是一个项目中用到了要调用很多参数和返回值相同的一系列函数,所以 想到了这个方法,不用重复的写方法名,使用循环调用
CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boolean 型态。 CByte(expression) 转换表达式为Byte 型态。 CChar...
CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boolean 型态。 CByte(expression) 转换表达式为Byte 型态。 CChar...
CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boolean 型态。 CByte(expression) 转换表达式为Byte 型态。 CChar...
列举了SQL语句中大部分常用的函数 Abs(number) 取得数值的绝对值。 Asc(String) 取得字符串表达式的第一个字符ASCII 码。 Atn(number) 取得一个角度的反正切值。 CallByName (object, procname, usecalltype,[args...
CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boolean 型态。 CByte(expression) 转换表达式为Byte 型态。 CChar...
VBA中使用CallByName函数实现任意单变量函数求极值和方程求解
16.3.1 VBIDE中的进程内组件597 16.3.2进程内组件和进程外组件之间的差别598 16.3.3在DLL中嵌入Forms600 16.3.4特性602 16.3.5用Satellite DLL扩展应用程序603 16.4多线程ActiveX组件607 16.4.1线程模型607 16.4.2多...
16.3.1 VBIDE中的进程内组件597 16.3.2进程内组件和进程外组件之间的差别598 16.3.3在DLL中嵌入Forms600 16.3.4特性602 16.3.5用Satellite DLL扩展应用程序603 16.4多线程ActiveX组件607 16.4.1线程模型607 16.4.2多...
CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boolean 型态。 CByte(expression) 转换表达式为Byte 型态。 CChar...
CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boolean 型态。 CByte(expression) 转换表达式为Byte 型态。 CChar...
ASP.NET常用函数Abs(number) 取得数值的...CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boolean 型态。 等等..............