zoukankan      html  css  js  c++  java
  • 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值。

  • 相关阅读:
    bug
    UIFont
    OC
    iOS 之 多线程一
    OC 之 const
    我的读书单
    算法之回文数判断
    排序算法 之 一
    isEqual
    xcode 必用插件二
  • 原文地址:https://www.cnblogs.com/zhuluqing/p/9077805.html
Copyright © 2011-2022 走看看