我以前从未使用过 COM,我的任务是编写一个使用一些第三方 COM 对象的应用程序。如果有人能指出一些关于如何使用它们的好教程,将不胜感激。更直接的是,我似乎没有安装活动模板库。我在网上搜索过,但不知道如何获得它。
6 回答
它是 Microsoft Visual Studio 的一部分(但不是Express Edition的一部分。)
正如 Dan 指出的那样,这些是随 Visual Studio 分发的。
如果您没有 Visual Studio,则可以从 Microsoft Visual C++ Redistributable 包之一获取 ATL 库:
注意:标有 2005 的是版本 8(atl80.dll),标有 2008 的是版本 9(atl90.dll)。
我认为您必须拥有 Visual Studio 2005 或 2008(不是 Express)的副本才能获得 ATL。如果您安装了其中一个,但没有 ATL,请转到“控制面板:添加/删除程序”并执行“修改”安装(在驱动器中使用程序 CD 或 DVD)并确保该框为 ATL 检查。
至于教程:
我还没有在网上找到一个很好的。有几个关于使用 ATL/COM 的 OK 页面:
- 活动模板库使构建紧凑的 COM 对象成为一种乐趣,作者 Don Box(COM 的资深专家)。本文开头:“我爱 COM。COM 很好。COM 就像一杯上好的比尔森啤酒或啤酒,从不让人失望。事实上,我越看 COM 越喜欢它。不幸的是,我使用 C++ 工作,而 C++ 确实如此。不分享我对生活中美好事物的欣赏。” 虽说宗师传教,现在12岁了,还是一篇不错的文章……
- Mike Dunn在 CodeProject上关于 COM的优秀教程。
- DevGuy 的 C++ COM 技巧——链接和建议的大杂烩。
- COM Programmer's Cookbook——这篇古老的(1995 年)文章还不错,尽管它的年代久远,而且它描述了用 C 而不是 C++ 实现 COM 对象(显式 vtables!)
我自己对 COM 和 ATL 有点生疏,但如果我没记错的话,你会想学习的类你会使用得最多(特别是如果你使用别人的 COM 对象而不是实现你的own) 是 CComBSTR、CComPtr 和 CComVariant。此外,Visual C++ 中的#import 语句使使用外部 COM 对象变得更加容易,它从外部 DLL 或 EXE 为您生成智能指针类。
如果您要实现 COM 对象,我强烈建议您获取ATL Internals的副本(现在有一个更新的版本涵盖 ATL v8)。是的,它确实在各个部分中详细介绍了一些血腥细节,但即使作为一本入门书,它也写得相当好。
如果您以前从未使用过 COM,那么“经典”书籍Essential COM和Effective COM非常好,您可能可以从您最喜欢的旧书来源以低廉的价格获得它们。如果您还没有熟悉RAII习语,您还需要非常熟悉。
新闻组microsoft.public.vc.atl非常适合提出特定问题。(不过,他们在那里往往比在 StackOverflow 上更粗暴)
当心:COM 有很多小问题,尽管 ATL 确实帮助它变得更容易并且没有太多臃肿。“模拟动态绑定”技术又名CRTP在 C++ 世界中很有用,不仅在 ATL/COM 的上下文中,而且特别是如果您正在开发一个可重用类库,您希望在只有一个实例的情况下子类化或混合一次出现(例如,一个类 CSpiffyFramework 提供了您想要大量重用的 mixin 功能,并且您有一个想要包含该功能的派生类,它不是虚拟对象模型的一部分,所以您真的不需要需要一个vtable)。
祝你好运!
我安装了这个:http ://www.microsoft.com/en-us/download/details.aspx?id= 3138 并在我的构建服务器上获得了 C++ 编译器和所有东西,但没有 ATLMFC 库。上面链接的redist包就是这样,可再发行的,而不是需要的头文件和包含文件。经过大量搜索,我最终在服务器上安装了vs2008,废话。
这是如何将 atl 与 vs express 一起使用:
你需要 WDK 7.1.0:
https://www.microsoft.com/en-us/download/details.aspx?id=11800
下载 Visual Studio 速成版
从 Microsoft 免费获取 VS Express C++
从 Microsoft 下载免费提供的 Windows Driver Kit(7.1 或更高版本)
从 Microsoft 免费获取 WDK 7.1.0
您可以使用虚拟克隆驱动器挂载 ISO 文件或使用 7-zip 解压缩它。
安装 WDK 并选择“构建环境”选项
这将安装 ATL 和 MFC 头文件和库文件。ATL 是 Windows 上 FireBreath 的要求。确保将其安装在默认位置,以便 FireBreath 可以找到它
对于 VS 快递 2010
如果您使用的是旧版本的 FireBreath,scjohn 的这篇文章可能对您有用。请注意,FireBreath 1.4 beta 1 和更高版本不再需要这些步骤!
http://www.firebreath.org/display/documentation/Building+with+Visual+Studio+Express
【vs2010 express包含路径】
C:\WinDDK\7600.16385.1\inc\atl71
【vs2010 express lib路径】
C:\WinDDK\7600.16385.1\lib\ATL\i386