ATL实现COM组件
参考文献:https://blog.csdn.net/Marcus2006/article/details/41978799
ATL实现COM组件比较简单,关键是在程序中如何调用该组件。
vs2010制作好COM组件后,会自动注册,但是vs2015却没法自动注册。
一,自动注册:
直接从MFC Typelib中导入该组件,导入相应接口,就可以了。
二、非自动注册:
方法一:
只需要两个文件:.tlb文件和.dll文件。
1.导入.tlb文件和.dll文件;
首先将.tlb文件的目录添加到VC++目录-库目录内,将.dll文件放在当前可执行文件目录内。
#import "xx.tlb" no_namespace
#import "xx.dll" no_namespace (一般将这两句话放在stdafx.h文件中)
添加no_namespace的目的是程序会自动为该COM组件添加命名空间xxLib(其中xx为COM工程名称,添加后就不使用命名空间了。
如果不添加no_namespace,就添加一句using namespace xxLib;
2.编译一下调用程序。
3.注册DLL(参考使用MFC生成COM组件)
用LoadLibrary()获得dll文件句柄,然后获取DllRegister函数进行注册,不多说。
4.调用CoCreateInstance()函数
其中GUID值通过__uuidof(class/interface)获取,原因见后面三。
方法二(不推荐):
1.在COM组件中找到xx_i.h文件和xx_i.c文件,并导入
#include "xx_i.h"
#include "xx_i.c"
2.注册,不多说
3.调用CoCreateInstance()函数
其中的guid值,直接包含在xx_i.c文件中,直接使用。
即,CLSID_XX和IID_IXX
三、tlb文件的关键作用
我们在第一步导入tlb文件,第二步编译一下调用程序,实际上是让编译器将xx.tlb文件编译成两个文件,xx.tli文件和xx.tlh文件。
xx.tlh文件:该文件包含了COM组件所有接口,类和它们的GUID值。
xx.tli文件:该文件包含了组件类的方法声明。
看到没,只有首先生成了这两个文件,才能获取类和接口的GUID值。
__uuidof(classname/interfacename),该函数的参数是COM类名或接口名称,通过该函数就可以获取相应接口和类的GUID值。
ATL实现COM组件的更多相关文章
- VC++ : VS2008 使用ATL开发COM组件
		
新建ATL Project,工程名命名为MyAtlCom: 出现工程 向导,一路“Next”: Add class,点击添加 ATL Simple Object , 类名CStatistic, 接口I ...
 - 【VS开发】ATL辅助COM组件开发
		
有些时候在程序的编写过程中我们会跨语言写一些东西,比如在C#中使用到C++,这个时候COM的出现就很好的解决了这一问题,我们如何来创建并且编写COM组件呢? 一.首先:创建一个ATL项目,如下图所示: ...
 - COM组件 IDispatch 及双接口的调用
		
转自:http://blog.csdn.net/cnhk1225/article/details/50555647 一.前言 前段时间,由于工作比较忙,没有能及时地写作.其间收到了很多网友的来信询问和 ...
 - 【转载】COM 组件设计与应用(十一)—— IDispatch 及双接口的调用
		
原文:http://vckbase.com/index.php/wv/1236.html 一.前言 前段时间,由于工作比较忙,没有能及时地写作.其间收到了很多网友的来信询问和鼓励,在此一并表示感谢.咳 ...
 - 【转载】ATL问题集
		
原文:http://blog.csdn.net/fengrx/article/details/4171629 这些问题是以前在csdn当版主是一些朋友整理的,今天找到了,贴到这里来! #1 如何使用控 ...
 - COM组件宏观认识
		
一直搞不清楚COM到底是个什么东西,记录一些个人感想,可能很多错误的,慢慢消化. 一.宏观认识: 1.COM(组件对象模型)是一种标准,规则,要求,即即于建筑设计指标要求. 2.语言无关性,因为是建立 ...
 - 【转载】COM多线程原理与应用
		
原文:COM多线程原理与应用 目录: COM多线程原理与应用 目录: 前言: 套间: 套间的定义: 套间的分类: 套间的进入和退出: 对象的同步: 组件对象的同步: COM对象线程模型: 进程内对象线 ...
 - COM 参数有in, out ,retval
		
COM 参数有in, out ,retval 来源:http://blog.sina.com.cn/s/blog_472a9f0c01017uer.html In 输入参数,它的值不被返回 Ou ...
 - VS2019 离线安装方法详解
		
本文详细介绍了 VS2019 离线安装的相关步骤,以桌面开发为主下载 C++桌面开发..NET 桌面开发相关的工作负载.MFC 可选组件及帮助查看器. 工作负载(Workload) 离线安装需要先根据 ...
 
随机推荐
- usermod命令
			
usermod 功能: 修改用户 常用参数:-c 账号说明-d 账号家目录-e 密码失效日期-g 主用户组GID-G 次用户组GID-l 账号名称-s she ...
 - shiro 实现自己定义权限规则校验
			
<span style="font-family: Arial, Helvetica, sans-serif;">在系统中使用shiro进行权限管理,当用户訪问没有权限 ...
 - PHP-Manual的学习----【语言参考】----【基本语法】
			
2017年6月28日11:29:311.当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php 和 ?>,这告诉 PHP 开始和停止解析二者之间的代码.此种解析方式使得 PHP ...
 - Linux下的目录操作
			
. 此层目录 .. 上层目录 - 前一个工作目录 ~ 当前用户的工作目录 ~account 表示account的家目录 1.cd:改变目录,change Directory的缩写. 2.pwd:显示当 ...
 - python接口自动化(四十二)- 项目结构设计之大结局(超详解)
			
简介 这一篇主要是将前边的所有知识做一个整合,把各种各样的砖块---模块(post请求,get请求,logging,参数关联,接口封装等等)垒起来,搭建一个房子.并且有很多小伙伴对于接口项目测试的框架 ...
 - yii2.0 中的队列
			
a yii2 extension to make simple to use queue. yii2-queue让队列的使用在yii2中变得更轻松,她为各种队列组件的使用提供了一个标准的接口,您只需要 ...
 - DBCP组件概述
			
许多Apache的项目都支持与关系型数据库进行交互.为每个用户都创建一个连接是一项非常耗时的工作(通常情况下,需要花费几秒中),而为了执行数据库的事务处理可能还需要花费几毫秒.对于一个对外公开访问的互 ...
 - 【BZOJ1226】[SDOI2009]学校食堂Dining 状压DP
			
[BZOJ1226][SDOI2009]学校食堂Dining Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满 ...
 - ResfulApi规范
			
序号 方法 描述 1 GET 请求指定的页面信息,并返回实体主体. 2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 3 POST 向指定资源提交数据进行处理请求(例如提 ...
 - POJ 1584 A Round Peg in a Ground Hole【计算几何=_=你值得一虐】
			
链接: http://poj.org/problem?id=1584 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...