了解COM对象

时间:2013-02-23 18:36:20

标签: com vbscript

我正在努力理解COM概念。根据我的理解:COM是一个二进制接口或执行的函数库(机器语言),可以由任何编程语言在供应商公开的功能和属性的帮助下进行扩展或重用。

如果代码如下,我们可以说FsoTxtobj创建的对象是COM还是ActiveX对象?

如果我们想在Java等其他编程语言中创建相同的文件系统或Text流对象,我们该怎么办?因为我们说COM作为语言独立。

Set Fso = CreateObject("Scripting.FileSystemObject")

Set Txtobj = Fso.CreateTextFile("C:\Users\ACER\Desktop\Project Folder\NewText_5.txt")

1 个答案:

答案 0 :(得分:4)

如果我理解你的问题是什么:

某些东西是基于如何构建的COM对象,以将其功能暴露给使用它的其他代码。它必须构建为遵循某些规则,并且必须提供必需的某些功能,并且必须在二进制级别(位和字节)以非常特定的方式执行。不幸的是,具体规则冗长且过于复杂,无法在此答案中解释。

使用对象的代码也必须遵守规则和特定的二进制要求。

语言独立性源于这样一个事实:规则非常精确,并且它们的设计使它们不受任何特定语言的束缚。许多语言可用于编写COM对象,许多语言可以使用COM对象。我的意思是那些语言需要为程序员提供遵守这些规则的机制。这是关键:规则没有具体的 语言应该能够遵守规则。每种语言都有不同的方式;某些语言会自动为您处理大量细节,而其他语言则要求您手动完成大部分工作。有些使用仅适用于COM的特殊语法,而其他语法则使用与其他所有语法相同的语法。

请注意,“语言独立性”(我称之为“语言中立性”)与“语言普遍性”不同。并非每种语言都可以使用COM。

考虑到这一点,您的答案是:

1)如何通过读取代码行(例如示例中的代码)来了解某个COM对象是什么?

真正的答案是:“它取决于对象的编写方式。如果编写符合COM的规则并且通过您的语言通过COM机制调用它,那么它就是一个COM对象”。在查看代码并尝试在不查看对象详细信息的情况下决定是否为COM的特定情况下,答案是:“这取决于语言。”

在VBScript的示例代码中,两者都是COM对象。表达式使用Set命令的事实立即告诉您变量将引用COM对象。请记住,答案在其他语言中会有所不同(例如,即使在VB6中,set的存在也不足以知道对象是否是COM对象。)

2)语言独立性如何实现?

通过在二进制级别使用严格规则来实现。不同的语言遵循规则的不同方式,这是可以的。有些语言不符合这些规则,因此不支持COM。

您展示的那些特定对象具有自己的功能,是的,它们通过功能和属性工作;这些都是一些规则。如果某种语言没有允许您调用这些函数的机制,则该语言不能用于使用COM对象。

如果你想学习规则,它们通常用C或C ++表达,关于这个主题的最好的书之一是Don Box的“Essential COM”。