用于ActiveX的MFC与ATL

时间:2017-01-20 12:17:52

标签: c++ mfc atl

对于ActiveX开发,我应该使用什么? MFC还是ATL?
Microsoft Documents中,它表示我们可以使用MFC来构建ActiveX控件。但是当我在Google上搜索时,我看到有人提到ATL对这项工作很有帮助。这就是我从Wikipedia得到的,这似乎证实了这一论点。

  另一方面,在不需要MFC的图形用户界面部分的情况下,ATL是一种更轻量级的替代方案。

我应该使用什么?如果我可以同时使用它们,那么使用它们的优缺点是什么?

3 个答案:

答案 0 :(得分:5)

使用ATL。我在MFC开发了20多年。对于绝大多数用途而言,ATL是更好的选择,因为它更轻巧,更易于理解 - 尽管两者都有陡峭的学习曲线。

我选择使用MFC而不是ATL的唯一原因是:

1)我正在编写一个非常复杂的ActiveX / Windows控件,在MFC中编写它的windows控件部分是有意义的,因此在MFC中搭载控件的COM接口是有意义的。但是,对于补充对象(比如一个返回Object的属性),我会使用ATL,除非它们也是一个非常复杂的窗口控件。

2)我必须对文档类型使用OLE(对象链接和嵌入),并且更容易使用MFC的内置框架。

我已经在同一个MFC项目上工作了20多年,这是一个非常复杂的Windows程序。该计划的大多数方面都是由COM公开的。我们混合使用MFC COM和ATL COM。当我第一次开始时,在ATL获得牵引力之前,我通常在MFC中实现COM对象。现在,除非出现上述两个原因,否则我使用ATL。

但是,这只是一种意见。

答案 1 :(得分:4)

虽然可以使用MFC构建ActiveX组件,但ATL被设计为轻量级且更高效的低开销替代方案。此外,您还可以在ATL顶部使用WTL作为GUI部件。

如果你想要一个较小的低开销ActiveX组件,我建议使用ATL(和WTL)。

答案 2 :(得分:4)

ATL在这里是我的第一名!

设计界面以及COM对象处理的调整方式非常灵活。

ATL还允许轻松构建双接口。 MFC只是一个直接的IDispatch实现。

即使在我的MFC应用程序中,我也只在内部使用ATL来处理所有COM部件。