软件工程的核心:模块化,最理想的情况是100%内聚0%耦合。
COM技术:微软公司的最高级二进制通讯规范,COM和DLL一样都是基于二进制的代码重用,其本身也就是DLL
 用于软件组件间跨进程,跨机器,和操作系统进行交互操作。COM是透明位置的。它
 可以在EXE,DLL或者远程机器上使用。
 
 
 
ATL COM应用
http://my.oschina.net/u/1024767/blog/352647
1、打开VS2010,新建ATL COM 项目,步骤:“文件” --》“新建” --》“项目”,选择“Visual C++” --》“ATL 项目” ,填写“名称” FirstCOM --》“确定”。
2、ATL 项目向导,勾选 【支持COM+ 1.0】和【支持部件注册器】,其他默认,点击完成。
3、切换到类视图,右键单击项目“FirstCOM”--》“添加”  --》“类”。
4、选“ATL”  --》“ATL 简单对象” --》“添加”。
5、ATL  简单对象向导,“简称”中输入类名称FirstClass,其他输入框会自动填写,最下面的“ProgID”没有自动填写,最好自己写上一个,如FirstCOM.math,否则后面无法正确调用组件,点击“完成”。如果出现提示【是否覆盖现有文件】,点击【是】即可。
6、切换到类视图,选中刚才添加的接口IFirstClass,如下,然后右键单击【添加】添加方法。
7、添加方法向导,在"方法名"  下输入Add。增加两个输入参数:勾选【in】,选择参数类型LONG,输入参数名para1,点击“添加”。同样操作增加参数para2。然后增加一个返回参数:先选择参数类型LONG*,再勾选【retval】,输入参数名result,点击添加。点击“完成”即可,如果点击下一步,不需要填写信息,点击“完成”即可。
8、切换到解决方案资源管理器,展开项目“源文件”, 双击 FirstCom.idl 打开IDL定义文件,看到如下代码,就是定义的COM方法了。
9、双击打开FirstClass.cpp  编辑代码:*result = para1 + para2;
10、编译运行,会生成dll文件,并自动注册到系统中。
问题及解决方法

问题1:我在Win64位系统中编译的,出现错误:无法打开预编译头文件:“Debug\FirstCOM.pch”:No such file or directory。
解决:右键点击你创建的项目,选择“属性”,弹出“FirstCOM 属性页”,在左侧展开"配置属性"--》展开“C/C++”--》选中“预编译头”,在右边的“预编译头”下拉菜单中选择“不使用预编译头文件”,点击“确定”按钮退出。
原因分析:编译器一般都是以文件为单位进行编译,如果修改了工程中的一个文件,那么将导致所有文件都要重新编译,这样的编译将耗费很长时间。为了提高编译速度,将那些不常被修改,比较稳定,文件单独包含到一个指定的头文件中, 然后生成一个预编译头文件 *.pch 。 VC++中默认的头文件为 stdAfx.h, 但光有头文件无法编译,所以还要用到StdAfx.cpp,StdAfx.cpp里只包含一句有效代码,这样编译时,通过编译  stdAfx.cpp就把大部分系统头文件编译进来, Debug目录下便会产生一个 存储了预编译信息的 *.pch 文件。如果 *.pch文件损坏或者不存在,就会出现“问题1”所示的无法打开预编译头文件的错。
如需深究,可参考博客:无法打开包括文件:“Stdfx.h

问题2:解决了问题1之后,又出现:error MSB8011: 未能注册输出。请尝试启用“逐用户重定向”,或者使用提升的权限从命令提示符处注册该组件。
解决: 项目-》属性-》链接器-》逐用户重定向--》设置为 true  (该方案网上常见,但仍“未能”根本解决问题)
分析: 由于win7权限问题,所以出现问题3,需要通过使用命令提示符来帮助注册该组件。

问题3:无法启动程序:“I:\VS Project\FirstCOM\Debug\FirstCOM.dll”。
解决:程序 --》 附件 --》 命令提示符,在”命令提示符“上点击鼠标右键,选择”以管理员身份运行“命令,这个时候将打开Dos命令窗口。
接下来输入:regsvr32   “I:\VS Project\FirstCOM\Debug\FirstCOM.dll”  (就是 regsvr32+.dll文件所在的完全路径了,全路径最好用引号括起来)
按 Enter 键,就能够注册成功了。

COM DLL 使用方式:
*1.界面程序:类视图中选中当前对话框类->右键添加类->MFC->TypeLib中的MFC类
*2.动态链接库的动态加载:
 #include "atlcomcli.h" 
 #import "FirstCOM.dll" no_namespace

重要解释:
LoadLibrary
 一般是动态加载DLL时(你并不需要对应的头文件,和LIB),显示加载dll中函数,前提是你自己对dll导出的函数参数很了解.

#pragma comment
一般是静态加载DLL时(对应的头文件、DLL,和LIB缺一不可,并且生产的EXE没有找到DLL文件就会导致“应用程序初始化失败”)

#import
 导入的dll是com组建的dll,主要用来解析com组建内部结构,便与c++识别调用

关于COM组件部分总结相关推荐

  1. 第四天:Vue组件的slot以及webpack

    插槽 认识slot 在生活中,很多地方都有插槽,电脑的USB插槽,插板中的电源插槽等. 插槽的目的是让我们原来的设备具备更多的扩展性.比如电脑的USB我们可以插入U盘.鼠标.键盘.硬盘.手机.音响等等 ...

  2. 第三天:Vue的组件化

    1.认识组件化 我们将一个完整的页面分成很多个组件,每个组件都用于实现页面的一个功能块,而每一个组件又可以进行细分. 组件化是Vuejs中的重要思想,它提供了一种抽象,让我们可以开发出一个个独立可复用 ...

  3. 客快物流大数据项目(六):Docker与虚拟机的形象比喻及组件介绍

    目录 Docker与虚拟机的形象比喻及组件介绍 一.Docker与虚拟机的形象比喻

  4. 2021年大数据Hadoop(二十六):YARN三大组件介绍

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn三大组件介绍 ResourceManager No ...

  5. android layout组件,Android UI学习 - Linear Layout, RelativeLayout

    1.一些常用的公共属性介绍 1) layout_width -宽 fill_parent: 宽度和父元素相同,wrap_content: 宽度随本身的内容所调整,或者指定 px值来设置宽 2) lay ...

  6. vue 拓扑组件_Authing 登录组件优化实践解析

    Authing Guard 是一种可嵌入的登录表单,可根据你的需求进行配置,它使你可以轻松添加各种社会化登录方式,以便你的用户可以无缝登录,并且在不同平台拥有一致的登录体验. Authing 2.0 ...

  7. 微信小程序自定义组件Component的简单使用

    首先为什么要使用component 这里列举2个例子, 1 如果项目中多个地方使用同一个弹框, 2 两个同事合作写一个界面, 这2中情况使用组件是比较好的选择 开始吧 第一步首先创建一个包用于存放组件 ...

  8. RelativeLayout布局,不希望文本盖住其他组件

    简单的图先看上一看 上面使用的是RelativeLayout布局(不要问为什么不用LinearLayout,因为最右边的信箱的右上角还会有个红点,相对布局直接些) 需要实现的效果是,TextView居 ...

  9. spring 组件基于注解的注册方式

    spring 中常用的组件标签有: @Controller:控制层 @Service:业务层 @Repository:数据层 @Component:普通的pojo注入到spring容器 组件注册方式: ...

  10. 开源组件websocket-sharp中基于webapi的httpserver使用体验

    一.背景 因为需要做金蝶ERP的二次开发,金蝶ERP的开放性真是不错,但是二次开发金蝶一般使用引用BOS.dll的方式,这个dll对newtonsoft.json.dll这个库是强引用,必须要用4.0 ...

最新文章

  1. Semver(语义化版本号)扫盲
  2. Office无法打开超链接地址问题
  3. Android Studio开发flutter快捷键
  4. android源码编译烧鸡,android4.0源码下载 编译 系统体验~图解
  5. html框架实验总结,网页设计实训心得
  6. Spring MVC:表单处理卷。 2 –复选框处理
  7. java 圆的交点_java – 获取线条和形状的交点
  8. AJAX异步检查,检查用户名是否存在
  9. java spark dataset_Spark 2.0介绍:Dataset介绍和使用
  10. macOS Mac10.15修改登录界面背景
  11. 通赢A5管理系统服务器连不进,赢通软件A5A6系列管理系统参数设置说明
  12. 叛逆连队2怎么自建服务器,《战地:叛逆连队2》目前暂不支持第三方服务器
  13. uva-10041-水题
  14. 半导体产业行业手持式粒子计数器工作原理
  15. svg html g标签id,svg是什么?svg常用的方法(附代码)
  16. MLAPP————第五章 贝叶斯统计
  17. P3975 [TJOI2015]弦论 (SAM)
  18. ELK ILM 策略实现冷热数据分离 持续更新
  19. with dlz mysql 条件_BIND+DLZ+MYSQL实现区域记录动态更新
  20. 平面设计学费,平面设计学费大概多少:夏雨老师

热门文章

  1. python分支结构if详解
  2. android id 重名_android 中不同的Xml中id可以重名吗?
  3. Windows系统查询遗忘的WiFi密码
  4. CPU内部结构及工作原理
  5. 《梦幻西游》手游主程刘强:如何提供一个稳定高效的MMO手游服务器引擎
  6. GEE导出图像到本地结果全部为空
  7. 2022年保研经验贴建议个人经历:计算机软件工程
  8. 希希敬敬对Alpha阶段测试报告
  9. 【历史上的今天】9 月 15 日:华为诞生;Stack Overflow 网站公开测试;计算机协会成立
  10. 全志H616芯片方案香橙派zero2开发板连接USB麦克风的使用方法