中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > .NET > 临时文章
后绑定方式下对Object的处理
作者:未知 时间:2004-12-09 12:12 出处:Blog 责编:chinaitpower
              摘要:暂无

后绑定方式下对Object的处理

 

CallByName , TypeName , CreateObject 以及 TypeLib库的组合使用

 

在大多数的Visual Basic编程中,关于对象的操作都是在明确对象类型的情况下进行的,开发者会定义一个对象为某某类,这样就会很清楚使用的Object是属于什么类(Class),都有些什么属性(Property),有哪些方法(Method)。

 

   但是有些时候也会有这样一种需求 , 要去实现一个操作不确定类型对象的函数 , 函数包含一个 As Object的参数 , 函数运行时也会有不确定类型的中间对象。这时候下面三个函数和一个DLL的组合会提供在后绑定模式下我们需要的帮助。

 

1)  TypeName (VarName) As String

    这个函数将返回参数的数据类型 , 对于对象类型将返回该对象的类名。

    例如:

    Dim objRS As Recordset

    Debug.Print TypeName(objRS)

    将Print 出字符串 “Recordset”

 

2)  CreateObject(Class As String, [ServerName As String])

CreateObject这个函数比较常用 , 相对于直接定义一个对象 , 他的好处就是可以在后期通过一个字符串作为类的标示来创建对象。这样就可以在函数的运行期通过某种方式(当然也包括上面提到的TypeName函数)

确定具体要创建什么类型的对象 , 而不必在编码的阶段确定下来 , 因为那并不符合要求。

例如:

Set ObjNew = CreateObject(TypeName(p_objDest))

将在函数体的某一处创建一个与参数对象同类型的中间对象。

 

 

 

3) Function CallByName(Object As Object, ProcName As String, _

CallType As VbCallType, [Args() As Variant])

 

在解决了类的问题后 ,还要面对的就是对Object的Method的调用。很显然仅仅Create 一个Object是不够的 , 但是对于不确定的类 , 具有的Method 也是不确定的 , 所以在函数体内也不可以写死。

CallByName函数就可以解决这个调用的问题。在函数运行时 , 通过某种方式(可能是传入的参数 ,也有可能使下面的TypeLib库提供的帮助)得知要使用的Method后的名字后 , CallByName 就可以使用这个Method的名字(字符串)对他进行调用。

例如:

CallByName(objDest , p_strMethodName , vbMethod , 12) ‘p_strMethodName = “Test”

将等同于 Call objDest.Test(12)

 

4)     TypeLib Information 库。

 

       这个DLL可以用来对任意类型对象的属性及接口遍历 , 并且对这些接口进行十分细致的分解。

下面的代码是一个简单的使用TypeLib的例子:


 

Public Function GetPropFromObject(ByRef objDest As Object)

 

    Dim objTypeLib As TLI.InterfaceInfo

    Dim objProp As TLI.MemberInfo

    Dim lngCnt As Long

   

On Error GoTo Error_Handler

   

    ‘ 读objDest 的接口信息

    Set objTypeLib = TLI.InterfaceInfoFromObject(objDest)

   

    lngCnt = 0

 

    ‘ 对读出的信息进行遍历

For Each objProp In objTypeLib.Members

‘ 过滤 , 每一个接口都属于特定的调用类型

‘ 这里为只Print该对象的Property Get类型的接口

If objProp.InvokeKind = INVOKE_PROPERTYGET Then

       ‘ objProp.Name 就是这个接口的名字

       ‘ 它可以返回给上面的CallByName , 当然这并不是唯一目的

        Debug.Print lngCnt & "  " & objProp.Name

          End If

        lngCnt = lngCnt + 1

    Next

 

    Exit Function

 

Error_Handler:

    

End Function

 

 

     上面的三个函数和一个DLL , 可以在后绑定模式对象的使用上为我们提供很多帮助 , 加上用心的分析和设计 , 相信可以解决这一范围内的大多问题。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有