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) 离线安装需要先根据 ...
随机推荐
- JavaWeb学习总结第五篇--认识Cookie机制
Cookie机制 前言 会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie和Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服 ...
- STL源代码分析--萃取编程(traits)技术的实现
1.为什么要出现? 依照默认认定.一个模板给出了一个单一的定义,能够用于用户能够想到的不论什么模板參数!可是对于写模板的人而言,这样的方式并不灵活.特别是遇到模板參数为指针时,若想实现与类型的參量不一 ...
- ASP.NET动态网站制作(16)-- SQL数据库(2)
前言:SQL数据库的第二节课,继续讲解基本的语句及用法. 内容: 1.insert插入语句 insert into Book(bookName,bookPrice,bookAuthor) value ...
- postman是如何使用的?
1.地址:https://segmentfault.com/a/1190000005055899
- lumen手记:自定义Validate表单验证
版权声明:本文为博主原创文章,未经博主允许不得转载. 今天开始跳lumen的表单验证Validate类的坑,确实好坑!!! 首先,lumen的表单验证返回是无状态的json格式api,这... 所有开 ...
- Elasticsearch集群问题,导致主master节点发现不了node节点
个人博客:https://blog.sharedata.info/ 最新需要配置es集群采用5个分片和1个副片,正好是11台机器,而只保留一份备份所以只需要5*2=10台机器方案:1.1台作为mast ...
- redis 集群 搭建
环境: centos6.5 192.168.16.11 centos6.5 192.168.16.12 centos6.5 192.168.16.13 三台虚拟机模拟9个节点,一台机器3个节点,创建出 ...
- group_concat函数导致的主从同步异常
group_concat函数导致的主从同步异常的问题总结 今天在处理一个group_concat函数导致的主从异常的问题,排查过程比较简单,不过第一次遇到这个问题记录一下排查的思路,后面如果再遇到其他 ...
- SimpleDateFormat注意点
今天测试了一下SimpleDateFormat把一个字符串转为Date类型 SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-M ...
- Android jni 编程(参数的传递,成员,方法的)相互访问
package com.test.androidjni; import android.app.Activity; import android.os.Bundle; import android.u ...