分享
 
 
 

CreateObject函数

王朝百科·作者佚名  2010-02-16
窄屏简体版  字體: |||超大  

Visual Basic 语言参考

CreateObject 函数 (Visual Basic)

创建和返回对 COM 对象的引用。CreateObject 不能用于在 Visual Basic 中创建类的实例,除非那些类显式公开为 COM 组件。

Public Shared Function CreateObject( _

ByVal ProgId As String, _

Optional ByVal ServerName As String = "" _

) As Object

参数

ProgId

必选。String。要创建的对象的程序 ID。

ServerName

可选。String。将要在其上创建对象的网络服务器的名称。如果 ServerName 为空字符串 (""),则使用本地计算机。

异常

异常类型 错误号 条件

Exception

429

找不到或未提供 ProgId。

- 或 -

ServerName 导致 DnsValidateName 函数失败,很可能是因为它的长度超过 63 个字符或包含无效字符。

Exception

462

服务器不可用。

FileNotFoundException

53

不存在指定类型的对象。

如果正在升级使用无结构错误处理的 Visual Basic 6.0 应用程序,请参见“错误号”一列。(您可以根据 Number 属性(Err 对象)比较错误号。)然而,如果可能,应当考虑用 Visual Basic 的结构化异常处理概述替换这种错误控制。

备注

若要创建 COM 组件的实例,请将由 CreateObject 返回的对象赋给一个对象变量:

复制代码

Sub CreateADODB()

Dim adoApp As Object

adoApp = CreateObject("ADODB.Connection")

End Sub

用于存储返回对象的对象变量的类型可影响应用程序的性能。通过用 As Object 子句声明对象变量所创建的变量可以包含对任何对象类型的引用。然而,通过该变量访问对象是“后期绑定”,即绑定在程序运行时发生。由于包括应用程序性能降低在内的多种原因,应该避免后期绑定。

可以创建一个导致早期绑定的对象变量,即绑定在编译程序时发生。若要执行此操作,从“项目”菜单上“添加引用”对话框的“COM”选项卡中,为您的对象添加对类型库的引用。然后声明对象的特定类型的对象变量。大多数情况下,使用 Dim 语句和主 Interop 程序集来创建对象比使用 CreateObject 函数更为有效。

与非托管代码交互

另一个问题是 COM 对象使用非托管代码,即没有公共语言运行库优点的代码。在将 Visual Basic 的托管代码与来自 COM 的非托管代码混合时,将涉及到相当程度的复杂性。添加对 COM 对象的引用时,Visual Basic 会搜索该库的主互操作程序集 (PIA);如果找到一个程序集,就会使用它。如果未找到 PIA,它会创建包含 COM 库中每个类的本地互操作类的互操作程序集。有关更多信息,请参见 .NET Framework 应用程序中的 COM 互操作性。

通常,您应该尽可能使用强绑定对象和主互操作程序集。下面的示例仅出于演示的目的将 CreateObject 函数用于 Microsoft Office 对象。但是,当与适当的主 Interop 程序集一起使用时,这些对象将更易于使用,并且更加可靠。

在远程计算机上创建对象

您可以通过将计算机的名称传递到 CreateObject 函数的 ServerName 参数,在远程网络计算机上创建对象。该名称与共享名的“计算机名”部分相同。例如,如果共享名是“\MyServerPublic”,则 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

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

注意

当不存在对象的当前实例时使用 CreateObject。如果对象的实例已经正在运行,则将启动新的实例并创建指定类型的对象。若要使用当前实例或者启动应用程序并让它加载文件,请使用 GetObject 函数。如果对象本身已经注册为单实例对象,则无论执行多少次 CreateObject,也只创建一个对象实例。

创建 Framework 对象

CreateObject 函数只能用于创建 COM 对象。尽管没有用于创建 .NET Framework 对象的完全等效机制,但 System 命名空间中的 Activator 包含有一些方法来创建本地或远程对象。具体而言,CreateInstance 方法或 CreateInstanceFrom 方法很有用。

安全注意

CreateObject 函数需要非托管代码权限,这可能会对它在部分信任情况下的执行产生影响。有关更多信息,请参见 SecurityPermission 和代码访问权限。

示例

下面的示例使用 CreateObject 函数来创建 Microsoft Excel 工作表,并将该工作表保存到文件中。若要使用此示例,必须在运行此程序的计算机上安装 Excel。而且,您必须从“项目”菜单上“添加引用”对话框的“COM”选项卡中添加对类型库的引用。根据计算机上安装的 Excel 版本,类型库的名称将有所不同。例如,对于 Microsoft Excel 2002,类型库的名称为 Microsoft Excel 10.0 Object Library。

Visual Basic 复制代码

Sub TestExcel()

Dim xlApp As Microsoft.Office.Interop.Excel.Application

Dim xlBook As Microsoft.Office.Interop.Excel.Workbook

Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet

xlApp = CType(CreateObject("Excel.Application"), _

Microsoft.Office.Interop.Excel.Application)

xlBook = CType(xlApp.Workbooks.Add, _

Microsoft.Office.Interop.Excel.Workbook)

xlSheet = CType(xlBook.Worksheets(1), _

Microsoft.Office.Interop.Excel.Worksheet)

' The following statement puts text in the second row of the sheet.

xlSheet.Cells(2, 2) = "This is column B row 2"

' The following statement shows the sheet.

xlSheet.Application.Visible = True

' The following statement saves the sheet to the C:Test.xls directory.

xlSheet.SaveAs("C:Test.xls")

' Optionally, you can call xlApp.Quit to close the workbook.

End Sub

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有