参考文献: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组件的更多相关文章

  1. VC++ : VS2008 使用ATL开发COM组件

    新建ATL Project,工程名命名为MyAtlCom: 出现工程 向导,一路“Next”: Add class,点击添加 ATL Simple Object , 类名CStatistic, 接口I ...

  2. 【VS开发】ATL辅助COM组件开发

    有些时候在程序的编写过程中我们会跨语言写一些东西,比如在C#中使用到C++,这个时候COM的出现就很好的解决了这一问题,我们如何来创建并且编写COM组件呢? 一.首先:创建一个ATL项目,如下图所示: ...

  3. COM组件 IDispatch 及双接口的调用

    转自:http://blog.csdn.net/cnhk1225/article/details/50555647 一.前言 前段时间,由于工作比较忙,没有能及时地写作.其间收到了很多网友的来信询问和 ...

  4. 【转载】COM 组件设计与应用(十一)—— IDispatch 及双接口的调用

    原文:http://vckbase.com/index.php/wv/1236.html 一.前言 前段时间,由于工作比较忙,没有能及时地写作.其间收到了很多网友的来信询问和鼓励,在此一并表示感谢.咳 ...

  5. 【转载】ATL问题集

    原文:http://blog.csdn.net/fengrx/article/details/4171629 这些问题是以前在csdn当版主是一些朋友整理的,今天找到了,贴到这里来! #1 如何使用控 ...

  6. COM组件宏观认识

    一直搞不清楚COM到底是个什么东西,记录一些个人感想,可能很多错误的,慢慢消化. 一.宏观认识: 1.COM(组件对象模型)是一种标准,规则,要求,即即于建筑设计指标要求. 2.语言无关性,因为是建立 ...

  7. 【转载】COM多线程原理与应用

    原文:COM多线程原理与应用 目录: COM多线程原理与应用 目录: 前言: 套间: 套间的定义: 套间的分类: 套间的进入和退出: 对象的同步: 组件对象的同步: COM对象线程模型: 进程内对象线 ...

  8. COM 参数有in, out ,retval

    COM 参数有in, out ,retval 来源:http://blog.sina.com.cn/s/blog_472a9f0c01017uer.html In 输入参数,它的值不被返回    Ou ...

  9. VS2019 离线安装方法详解

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

随机推荐

  1. JavaWeb学习总结第五篇--认识Cookie机制

    Cookie机制 前言 会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie和Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服 ...

  2. STL源代码分析--萃取编程(traits)技术的实现

    1.为什么要出现? 依照默认认定.一个模板给出了一个单一的定义,能够用于用户能够想到的不论什么模板參数!可是对于写模板的人而言,这样的方式并不灵活.特别是遇到模板參数为指针时,若想实现与类型的參量不一 ...

  3. ASP.NET动态网站制作(16)-- SQL数据库(2)

    前言:SQL数据库的第二节课,继续讲解基本的语句及用法. 内容: 1.insert插入语句  insert into Book(bookName,bookPrice,bookAuthor) value ...

  4. postman是如何使用的?

    1.地址:https://segmentfault.com/a/1190000005055899

  5. lumen手记:自定义Validate表单验证

    版权声明:本文为博主原创文章,未经博主允许不得转载. 今天开始跳lumen的表单验证Validate类的坑,确实好坑!!! 首先,lumen的表单验证返回是无状态的json格式api,这... 所有开 ...

  6. Elasticsearch集群问题,导致主master节点发现不了node节点

    个人博客:https://blog.sharedata.info/ 最新需要配置es集群采用5个分片和1个副片,正好是11台机器,而只保留一份备份所以只需要5*2=10台机器方案:1.1台作为mast ...

  7. redis 集群 搭建

    环境: centos6.5 192.168.16.11 centos6.5 192.168.16.12 centos6.5 192.168.16.13 三台虚拟机模拟9个节点,一台机器3个节点,创建出 ...

  8. group_concat函数导致的主从同步异常

    group_concat函数导致的主从同步异常的问题总结 今天在处理一个group_concat函数导致的主从异常的问题,排查过程比较简单,不过第一次遇到这个问题记录一下排查的思路,后面如果再遇到其他 ...

  9. SimpleDateFormat注意点

    今天测试了一下SimpleDateFormat把一个字符串转为Date类型 SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-M ...

  10. Android jni 编程(参数的传递,成员,方法的)相互访问

    package com.test.androidjni; import android.app.Activity; import android.os.Bundle; import android.u ...