MFC COM或ATL COM(ActiveX)

MFC COM或ATL COM(ActiveX),com,mfc,atl,Com,Mfc,Atl,我有一些MFC代码(自定义CWnd控件和一些要公开的类),我需要将它们生成一个带有接口的activex/COM对象。制作一个支持MFC的ATL项目,并以此方式制作我的ActiveX,还是制作一个MFC ActiveX控件更容易 在使用activeX控件时,使用双界面(如microsoft的ACDual中所述)是否正确/错误/没有区别?如果您是COM方面的新手,MFC是一种更简单的方法:向导更好、更有用。但它远不如ATL灵活,如果您只需要实现几个simpole接口,这可能不是问题 此外,IIRC

我有一些MFC代码(自定义CWnd控件和一些要公开的类),我需要将它们生成一个带有接口的activex/COM对象。制作一个支持MFC的ATL项目,并以此方式制作我的ActiveX,还是制作一个MFC ActiveX控件更容易


在使用activeX控件时,使用双界面(如microsoft的ACDual中所述)是否正确/错误/没有区别?

如果您是COM方面的新手,MFC是一种更简单的方法:向导更好、更有用。但它远不如ATL灵活,如果您只需要实现几个simpole接口,这可能不是问题

此外,IIRC MFC不支持双接口。双接口在两种情况下很有趣: -性能是一个问题。例如,对执行了数百万次的短方法的调用。 -对象用户是用C++编程的。在C++中调用本地接口比调用自动化接口更容易。
总之,双界面很酷,但只有当您可以免费使用它们时,它们才真正有趣。这意味着您使用支持它们的框架。如果您计划进行大量基于COM的工作,那么在ATL和更深入的COM知识中进行调查是很有趣的。如果您只需要提供两个简单的基于MFC的对象,只需使用MFC即可。

使用MFC for COM有点麻烦-要编写的代码太多,要复制的宏太多- 但是,如果混合使用MFC和ATL,您必须知道自己在做什么,因为它们看似相似但又不同,尤其是在使用ATL创建窗口时

最重要的是,如果从ATL使用MFC,则需要使用AFX_MANAGE_STATE(AfxGetStaticModuleState())启动ATL方法中的每一个,否则会出现随机问题。这是在使用MFC实现COM时自动完成的,这就是为什么每个方法中都有这些丑陋的方法\u管理\u状态宏


除此之外,它还能工作。ATL对象中的MFC对象是我所做的。

我一直使用没有MFC的直接ATL来开发COM组件。MFC作为一个应用程序框架很有用,我通常不需要轻量级(非UI)COM组件。ATL提供了对字符串、集合和各种实用程序类的大量支持,而无需引入所有MFC以及由此产生的后勤复杂性(如在每个公共API调用上设置上下文等)。如果您正在构建UI组件,它还包括通过CWindow及其朋友提供的一些基本UI支持。

如果我向mfc项目添加ATL支持,然后添加ATL ActiveX对象。。如何在Atl ActiveX中包装自定义cwnd??CWnd::create需要一个父CWnd*。。在MFC中,父控件将是COleControl(它是CWnd)。。ATL的activex源于CWindow。。