11

我的大部分经验是使用 Java 和 VB.NET 等高级语言。我确实有一些 C++ 经验(在大学)。

我了解 COM DLL 和 .NET 编译器生成的 DLL 之间的区别。我不完全理解 C 和 C++ 编译器生成的 COM DLL 和 Windows DLL 之间的区别。

我想在 .NET 程序中使用 C++ DLL。我设法让这个工作。我的问题具体是:C++ 生成的 DLL 和 VB6(基于 COM)生成的 DLL 有什么区别。

我花了一个小时在谷歌上搜索并查看 MSDN。我虽然不用问问题就能找到答案,但我没有。

4

2 回答 2

15

两者之间存在巨大差异。该列表太长,无法在 SO 帖子中准确重现,我将尝试重点介绍:

  • C++ DLL 必须导出它想让客户端代码可用的每个函数或类。一个 COM DLL 仅导出 4 个具有众所周知的名称和行为的函数
  • 使用 C++ DLL 的应用程序必须在链接时描述该 DLL 的接口,COM 服务器在运行时绑定
  • 使用 C++ DLL 的应用程序必须允许 Windows 在启动时找到 DLL,通常通过将 DLL 放在与 EXE 相同的目录或路径上。在没有客户端应用程序指定其位置的情况下找到 COM DLL。注册表在运行时用于定位 DLL
  • COM 服务器不必是 DLL。它可以是任何东西,包括同一台机器上的单独进程或位于世界各地另一台机器上的可执行文件。客户端代码不知道它所在的位置

特定于 COM 的自动化子集:

  • 任何支持 COM 的语言都可以使用 COM 服务器。在 Windows 中,这几乎是其中的任何一个。

最后一个要点可能会让您误以为您了解 COM dll 和 .NET dll 之间的区别。它们没有任何共同点,但 .NET 非常好,并且可以与 COM 服务器互操作。Tlbimp.exe 实用程序非常擅长掩盖差异。

于 2012-10-01T21:50:29.203 回答
5

Com 是一种二进制标准,它允许应用程序使用可互换的二进制模块,只要符合 com 标准,任何语言都可以生成 com 投诉库。因此,差异取决于某些 com 库将是本机机器代码,有些可能会通过解释器进行管理和运行。com 真正要做的是弥合 c++ 在源代码级别的 oop 风格与预构建的二进制世界之间的可用性差距。

于 2012-10-01T21:06:43.967 回答