1

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

所以如果下面的代码我们可以说FsoTxtobj创建的对象是 COM 或 ActiveX 对象吗?

而如果我们想用Java等其他编程语言创建相同的文件系统或文本流对象,我们应该怎么做?因为我们说 COM 是独立于语言的。

Set Fso = CreateObject("Scripting.FileSystemObject")

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

1 回答 1

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》。

于 2013-02-24T05:37:15.550 回答