我有一些MFC代码(自定义CWnd控件和一些要公开的类),我需要使用接口将其作为activex / COM对象。是否更容易使用MFC支持制作ATL项目并以此方式制作我的ActiveX或制作MFC ActiveX控件?
在进行activeX控件时,正在进行双接口(如微软的ACDual中所解释的那样)好/坏/无差别?
答案 0 :(得分:1)
此外,IIRC MFC不支持双接口。双接口在2种情况下很有趣: - 性能是一个问题。如调用短方法执行数百万次。 - 对象用户使用C ++编程。在C ++中调用本机接口比调用自动化接口更容易。
总之,双界面很酷但只有你可以免费使用它们才真正有趣。这意味着您使用支持它们的框架。如果你计划很多基于COM的工作,那么调查ATL和更深入的COM知识是很有趣的。如果您只需提供几个简单的基于MFC的对象,只需坚持使用MFC。
答案 1 :(得分:1)
使用MFC进行COM有点痛苦 - 编写的代码太多,要复制的宏 - 但是如果你混合使用MFC和ATL,你必须知道你在做什么,因为它们看似相似而且不同,特别是如果你用ATL创建窗口。
最重要的是,如果你使用ATL中的MFC,你需要使用AFX_MANAGE_STATE(AfxGetStaticModuleState())启动每个ATL方法,否则你会遇到随机问题。当您使用MFC实现COM时,这会自动完成,这就是为什么每个方法中都有这些丑陋的METHOD_MANAGE_STATE宏。
除此之外,它才有效。我在做ATL对象中的MFC对象..
答案 2 :(得分:1)
我一直使用没有MFC的直接ATL来开发COM组件。 MFC作为应用程序框架非常有用,我通常不需要轻量级(非UI)COM组件。 ATL为字符串,集合和各种实用程序类提供了大量支持,而无需将MFC的所有后勤复杂性(例如在每个公共API调用上设置上下文等)引入。如果您正在构建UI组件,它还包括通过CWindow及其朋友的一些基本UI支持。