一般而言,ATL实现了对COM组件最好的支持,所以不用MFC实现COM组件。但是MFC实际上也是可以实现COM组件的。

一、MFC DLL优点:

MFC com组件可以将MFC的类型作为参数进行传递,但ATL com只能用规定的COM数据类型。但实际上MFC 扩展dll也可以用MFC类型作为参数。

具体代码:https://github.com/moisiet/MFC-COM

COM组件与普通的DLL区别在于:1.COM组件需要注册才能使用,而普通的DLL不需要注册,直接LoadLibrary使用;2.COM组件通过暴露接口指针被调用,而普通DLL是暴露函数地址被调用。

MFC实现COM组件必须要选择Automation这个选项。

选择了这个选项才会提供注册,反注册和类工厂函数。

MFC实现COM组件时,实现接口的类必须是继承自CCmdTarget(或者其子类)的类,且必须选择Automation或者Created by ID 这个选项,因为只有该类才提供对IUnknown的支持。

MFC是通过嵌入类真正实现接口的(嵌入类包含再定义的继承自CCmdTarget类中)。

因此MFC实现COM方式与ATL实现COM方式是不一样的,一定要搞清楚。

当给定IID使用QuryInterface查找某个接口的时候,返回的实际并不是接口的指针,返回的是实现接口的内置类实例对象的地址,通过这个地址指针我们实现对接口方法的访问。

MFC实现COM组件的更多相关文章

  1. VS2012创建ATL工程及使用MFC测试COM组件

    一.创建ATL工程 1.创建ATL项目,取名为ATLMyCom 2.在ATL项目向导中,勾选[支持MFC](利用MFC测试用).[支持 COM+ 1.0],其余的选项默认,点击完成. 3.右键工程名称 ...

  2. MFC创建对话框组件对应变量并进行设置值(VS2010)

    m_path = strFolderPath; UpdateData(FALSE);

  3. 彻底放弃没落的MFC,对新人的忠告!--吃瓜群众围观撕逼

    http://bbs.csdn.net/topics/391817496 完全没想到10多年后还有人纠结要不要学MFC,我花点时间给新人们一个总结. 第1种观点 学习完MFC,你会更理解编程的思想,再 ...

  4. 【转载】COM 组件设计与应用(十)——IDispatch 接口 for VC.NET

    原文:http://vckbase.com/index.php/wv/1225.html 一.前言 终于写到了第十回,我也一直期盼着写这回的内容耶,为啥呢?因为自动化(automation)是非常常用 ...

  5. 【转载】COM 组件设计与应用(九)——IDispatch 接口 for VC6.0

    原文: http://vckbase.com/index.php/wv/1224.html 一.前言 终于写到了第九回,我也一直期盼着写这回的内容耶,为啥呢?因为自动化(automation)是非常常 ...

  6. ATL实现COM组件

    参考文献:https://blog.csdn.net/Marcus2006/article/details/41978799 ATL实现COM组件比较简单,关键是在程序中如何调用该组件. vs2010 ...

  7. VS2019 离线安装方法详解

    本文详细介绍了 VS2019 离线安装的相关步骤,以桌面开发为主下载 C++桌面开发..NET 桌面开发相关的工作负载.MFC 可选组件及帮助查看器. 工作负载(Workload) 离线安装需要先根据 ...

  8. 【Linux】-NO.87.Assembly.1.滴水逆向.1.001-【介绍】-

    1.0.0 Summary Tittle:[Linux]-NO.87.Assembly.1.滴水逆向.1.001-[基础]- Style:Java Series:Log4j Since:2017-04 ...

  9. COM组件(MFC篇)

    目录 第1章创建进程内组件    1 1.1 目标    1 1.2 创建项目    3 1.2.1 VC++6.0    3 1.2.2 VC++2010    4 1.2.3 VC++6.0与VC ...

随机推荐

  1. Android Handler警告,SimpleDateFormat警告

    1:Handler// This Handler class should be static or leaks might occur: IncomingHandler    @SuppressLi ...

  2. 线程池 Future 带返回结果

    package com.aibi.cmdc.bigscreen.action; import java.util.ArrayList; import java.util.HashMap; import ...

  3. 【POJ-2524】Ubiquitous Religions(并查集)

    并查集. #include<cstdio> #include<cstring> using namespace std; const int maxn = 55555; int ...

  4. String、StringBuilder、 StringBuffer 深入分析 源代码解析

    java学习有一段时间了.但学习的东西都是框架等东西,java基础知识有点遗忘.所以重温一下java基础知识.写写文章里面有错的希望大家指正共同进步~~ 一.String 大家常常会说使用" ...

  5. x^a=b(mod c)求解x在[0,c-1]上解的个数模板+原根求法

    /************************************* 求解x^a=b(mod c) x在[0,c-1]上解的个数模板 输入:1e9>=a,b>=1,1e9>= ...

  6. EasyNVR无插件直播服务器播放页面的集成----单独的播放器样式

    背景需求: EasyNVR自身拥有独立的客户端体系,安卓和IOS拥有各自独立的APP, 安卓下载地址:https://fir.im/EasyNVR: IOS下载可直接在APPstore搜索EasyNV ...

  7. JAXB解析XML为对象

    JAXB支持注解将XML转化为对象,具体看一个简单的例子: <?xml version="1.0" encoding="utf-8"?> <A ...

  8. CodeBackUP_node_find_serial

    /*************************************************************** ** Find the serial number Node ** R ...

  9. LeetCode:盛最多水的容器【11】

    LeetCode:盛最多水的容器[11] 题目描述 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为  ...

  10. J2EE SSH框架整合教程

    本文仅作为学习和研究的参考,与实际项目使用技术有所不同,由于作者水平有限,错误疏漏在所难免,请各位看官批评指教. 项目的源代码放在:https://github.com/Frank-Pei/SSHIn ...