【问题标题】:MFC COM or ATL COM (ActiveX)MFC COM 或 ATL COM (ActiveX)
【发布时间】:2010-12-16 22:41:00
【问题描述】:

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

在做一个 activeX 控件时,做双界面(就像微软的 ACDual 中解释的那样)好/坏/没有区别吗?

【问题讨论】:

    标签: com mfc atl


    【解决方案1】:

    如果您是 COM 方面的新手,MFC 是一条更简单的途径:向导更好,更有帮助。但它远不如 ATL 灵活,如果您只需实现几个简单的接口,这可能不是问题。

    另外,IIRC MFC 不支持双接口。双接口在两种情况下很有趣: - 性能是一个问题。例如调用一个短方法执行了数百万次。 - 对象用户是用 C++ 编程的。在 C++ 中调用原生接口比调用自动化接口要容易得多。

    总之,双界面很酷,但只有当你可以免费拥有它们时,它们才真正有趣。这意味着您使用支持它们的框架。如果您计划进行大量基于 COM 的工作,那么研究 ATL 和更深入的 COM 知识会很有趣。如果您只需要提供几个简单的基于 MFC 的对象,那就坚持使用 MFC。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 如果我将 ATL 支持添加到我的 mfc 项目,然后添加一个 ATL ActiveX 对象.. 我如何将我的自定义 cwnd 包装在那个 Atl ActiveX 中? CWnd::create 想要一个父级 CWnd*.. 在 MFC 中,父级将是一个 COleControl(它是一个 CWnd).. ATL 的 activex 派生自 CWindow..
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-09-08
        • 2010-11-07
        • 2013-06-21
        • 2012-10-17
        • 2017-06-05
        • 2011-08-05
        • 2010-09-14
        • 2012-02-28
        • 1970-01-01
        相关资源
        最近更新 更多