COM与非COM DLL

时间:2012-10-01 20:58:51

标签: vb.net dll com

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

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

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

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

2 个答案:

答案 0 :(得分:13)

两者之间存在巨型差异。该列表太长,无法在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实用程序非常擅长于分析差异。

答案 1 :(得分:5)

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