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值。
最新文章
- 2.5美元每月的VPS, host1plus
- U-boot的目录结构及spl功能
- Cordova 打包 Android release app 过程详解
- 分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署
- ifconfig 工具
- linux修改mac地址
- CQRS学习——最小单元的Cqrs(CommandEvent)[其一]
- 【BZOJ】1006: [HNOI2008]神奇的国度 弦图消除完美序列问题
- Linux堆内存管理深入分析--阿里聚安全
- web前端-html学习笔记
- 全新的ASP.NET !
- c#中的jQuery——HtmlAgilityPack
- SOCKET 编程TCP/IP、UDP
- 获取网络图片并显示在picturbox上,byte[]数组转换成Image:
- centos6.5磁盘扩容
- Tessaract 源码分析(转)
- 数组的typedef 和函数的typedef
- oracle-锁概念
- C# Process获取当前进程信息
- 解决Installation failed with message Failed to finalize session : INSTALL_FAILED_INVALID_APK的问题
热门文章
- DM8168 自己主动登录root用户
- getMeasuredHeight(),getScrollY(),getHeight()的区别和联系
- ios -富文本和尺寸
- 洛谷P2296 寻找道路==codevs3731 寻找道路
- zookeeper(二): Curator vs zkClient
- Android Studio support 26.0.0-alpha1 Failed to resolve: com.android.support:appcompat-v7:27.+ 报错解决方法
- LeetCode:移动零【283】
- 3.25课·········JavaScript的DOM操作
- Python——轻量级web服务器flask的学习
- ios中文模糊搜索兼容问题