MFC vs ATL for ActiveX
MFC vs ATL for ActiveX
对于ActiveX开发,我应该使用什么?MFC还是ATL
在Microsoft文档中,它说我们可以使用MFC来构建ActiveX控件。但当我在谷歌上搜索时,我看到一些人提到ATL适合这份工作。这是我从维基百科上得到的,似乎证实了这一论点
ATL是一种更轻量级的替代方案。
我应该使用什么?如果我可以同时使用这两种方法,那么使用它们的优点和缺点是什么?
使用ATL。我已经在MFC中开发了20多年。对于绝大多数用途,ATL是更好的选择,因为它更轻,更容易理解——尽管两者都有陡峭的学习曲线。
我选择MFC而不是ATL的唯一原因是:
1) 我正在编写一个非常复杂的ActiveX/windows控件,在MFC中编写其中的windows控件部分是有意义的,因此在MFC中搭载控件的COM接口也是有意义的。然而,对于补充对象(比如返回对象的属性),我会使用ATL,除非它们也是一个非常复杂的窗口控件。
2) 我必须对文档类型使用OLE(对象链接和嵌入),并且使用MFC的内置框架更容易。
我已经在同一个MFC项目上工作了20多年,这是一个非常复杂的Windows程序。程序的大多数方面都是由COM公开的。我们混合了MFC COM和ATL COM。当我刚开始的时候,在ATL获得吸引力之前,我通常在MFC中实现COM对象。现在,除非符合以上两个原因,否则我使用ATL。
但是,这只是一种意见。
虽然可以使用MFC构建ActiveX组件,但ATL被设计为一种轻量级、更高效、开销更低的替代方案。此外,对于GUI部分,您还可以在ATL之上使用WTL。
如果你想要一个更小的低开销ActiveX组件,我建议你使用ATL(和WTL)。
它在设计接口和COM对象处理方式方面更加灵活,可进行极大的调整。
ATL还允许轻松构建双接口。MFC只有一个直接的IDispatch实现。
即使在我的MFC应用程序中,我在内部也只对所有COM部件使用ATL。
- "error: no matching function for call to"构造函数错误
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何在C++中从两个单独的for循环中添加两个数组
- 在Linux for Windows上编译C++代码时出错
- 调用专用模板时出错"no matching function for call to [...]"
- 为什么我的for循环不能正确获取argv
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 在基于范围的for循环中使用结构化绑定声明
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- Python中的for循环与C++有何不同
- std::memory_order for std::atomic:<T>:wait
- 在更改for循环的第三部分后,未使用for循环结果
- 在 for 循环中查找问题时遇到困难
- 嵌套for循环C++的问题(初学者)
- MFC vs ATL for ActiveX