Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 其他  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702079
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

VBE界面下菜单工具引用(References)和用CreateObject来创建对象的区别

作者:cg1  摘自:access911.net  :cg1  更新日期:2005-9-6  浏览人次:

 

问题:

请解释一下,后引用和先引用的区别,我似懂非懂。

 


回答:

本站所说的“先引用”和“后引用”是我个人的说法。“先引用”就是按 Alt+F11 到 VBE 界面,菜单->工具->引用 里面去引用对应的类库,然后可以在代码中用
Dim objRS As New Adodb.Recordset
Dim 变量 As 类名.对象名


这样的方法来声明对象。也就是对 References 的操作。
“后引用”是用 CREATEOBJECT 来建立某个对象,比如:
Dim objRs
Set objRs = CreateObject("Adodb.Recordset")

其优缺点是:
    References的一个优点是,你可以在编写程序的时候直接引用一些类的定义,比较方便。一般的,CreateObject能够实现的References都可以实现,但反过来不成立,所以References要更好一些。对于安装以后,如果希望正确运行,两者都要求要调用的对象已经被正确注册。如果说CreateObject有什么优点的话,一是比较容易编写出错处理的代码,另一是可能更灵活一些。 
    References只能在编译程序之前将所有需要用的都引用,但CreateObject却能够在发布程序之后向程序中添加一些你已经在发布前预留好特定接口的后续对象,方便我们做PlugIn程序。

比较官方的说法称“先引用”为“早期绑定”

CreateObject 函数创建并返回对 COM 对象的引用。CreateObject 不能用于在 Visual Basic 中创建类的实例,除非这些类已显式公开为 COM 对象。
若要创建 COM 组件的实例,请将由 CreateObject 返回的对象赋给一个对象变量:

Sub CreateADODB()
   Dim adoApp As Object
   adoApp = CreateObject("ADODB.Connection")
End Sub

用于存储返回对象的对象变量的类型可影响应用程序的性能。通过用 As Object 子句声明对象变量所创建的变量可以包含对任何对象类型的引用。然而,通过该变量访问对象是晚期绑定的,即绑定在程序运行时发生。由于包括应用程序性能降低在内的多种原因,应该避免晚期绑定。若要创建导致早期绑定(即在编译程序时绑定)的对象变量,请从“项目”菜单上打开“添加引用”对话框,再打开“COM”选项卡,为您的对象添加对类型库的引用,并声明特定对象类型的对象变量。大多数情况下,使用 Dim 语句和主 Interop 程序集来创建对象比使用 CreateObject 函数更为有效。

另一个问题是 COM 对象使用非托管代码,即没有公共语言运行库优点的代码。在将 Visual Basic .NET 的托管代码与来自 COM 的非托管代码混合时,将涉及到相当程度的复杂性。当添加对 COM 对象的引用时,将搜索该库的主 Interop 程序集;如果找到一个,则使用它。如果没有找到,Visual Basic .NET 将创建一个互操作性程序集,其中包含 COM 库中每个类的局部互操作性类。有关更多信息,请参见 Visual Basic 和 Visual C# 中的 COM 互操作性。通常,您应该尽可能使用强绑定对象和主 Interop 程序集。以下示例仅出于演示的目的将 CreateObject 函数用于 Microsoft Office 对象。但是,当与适当的主 Interop 程序集一起使用时,这些对象将更易于使用,并且更加可靠。

通过将计算机名传递到 CreateObject 函数的 ServerName 参数,可以在联网的远程计算机上创建对象。该名称与共享名的“计算机名”部分相同。例如,如果共享名是“\\MyServer\Public”,则 servername 是“MyServer”。

注意   有关使应用程序在联网的远程计算机上可见的附加信息,请参考 COM 文档(参见 Microsoft Developer Network)。可能需要为应用程序添加注册表项。
以下代码返回运行在名为 MyServer 的远程计算机上的 Excel 实例的版本号:

Sub CreateRemoteExcelObj()
   Dim xlApp As Object
   ' Replace string "\\MyServer" with name of the remote computer.
   xlApp = CreateObject("Excel.Application", "\\MyServer")
   MsgBox(xlApp.Version)
End Sub


如果远程服务器名不正确或者不可用,将发生运行时错误。

 

 

 
相关文章
     没有手动相关文章
     MVC4的Razor视图中引用EXE类型的库无法运行提示未被引用《ASP/ASP.NET》
     如何知道引用的相对应的名称?
     如何调用/引用其他数据库(mdb/mde)的函数?
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利