2009-11-16 89 views
4

我有一些MFC代码(自定义的CWnd控件和一些需要公开的类),需要使用接口将其创建为activex/COM对象。使用MFC支持制作ATL项目并制作ActiveX或制作MFC ActiveX控件更容易吗?MFC COM或ATL COM(ActiveX)

当做一个activeX控件时,是做双接口(就像在微软的ACDual中解释的那样)好/差/没有区别?

回答

1

如果你是一个COM的新手,MFC是一个更简单的路线:向导更好,更有帮助。但它比ATL灵活得多,如果你只需要一对simpole接口来实现,这可能不是问题。

另外,IIRC MFC不支持双接口。双接口在两种情况下很有趣: - 性能是一个问题。如调用一个简短的方法执行数百万次。 - 对象用户使用C++进行编程。使用C++调用本地接口比调用自动化接口更方便。

总之,双接口很酷,但只有免费拥有它们,它们才真正有趣。这意味着你使用一个支持它们的框架。如果你计划在基于COM的工作,有趣的是调查在ATL和更深的COM知识。如果您只需提供几个简单的基于MFC的对象,只需粘贴到MFC即可。

1

使用MFC的COM有点痛苦 - 有太多的代码要写,要复制的宏 - 但是你必须知道你在做什么,如果你混合使用MFC和ATL,因为它们看起来很相似但不同,特别是如果你使用ATL创建窗口。

最主要的是,如果您从ATL使用MFC,则需要使用AFX_MANAGE_STATE(AfxGetStaticModuleState())启动每个ATL方法,否则您将遇到随机问题。当你用MFC实现COM时,这会自动完成,这就是为什么每个方法都有这些丑陋的METHOD_MANAGE_STATE宏。

除此之外,它只是工作。在ATL对象内的MFC对象是我所做的。

+0

如果我添加ATL支持我的mfc项目,然后添加一个ATL ActiveX对象..我怎么能包裹我的自定义cwnd在该Atl ActiveX? CWnd :: create想要一个父母CWnd * ..在MFC中,父母将是一个COleControl(这是一个CWnd).. ATL的ActiveX是从CWindow派生.. – BabelFish 2009-11-17 15:39:51

1

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