• 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值。

  • 相关阅读:
    pycharm快捷键
    类变量、实例变量--python
    内置窗口 pyqt5
    Python GUI教程(六):使用Qt设计师进行窗口布局
    PyCharm中Qt Designer+PyUIC配置
    PyQT5堆叠布局:切换界面(QStackedLayout)
    面试题之位运算的巧妙应用
    mybatis之Mapped Statements collection does not contain value for...错误原因分析
    tomcat报错Exception loading sessions from persistent storage解决方案
    leetcode数据库sql之Delete Duplicate Emails
  • 原文地址:https://www.cnblogs.com/zhuluqing/p/9077805.html
Copyright © 2020-2023  润新知