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

  • 相关阅读:
    linux下shell显示-bash-4.1#不显示路径解决方法
    update chnroute
    An error "Host key verification failed" when you connect to other computer by OSX SSH
    使用dig查询dns解析
    DNS被污染后
    TunnelBroker for EdgeRouter 后记
    mdadm详细使用手册
    关于尼康黄的原因
    Panda3d code in github
    Python实例浅谈之三Python与C/C++相互调用
  • 原文地址:https://www.cnblogs.com/zhuluqing/p/9077805.html
Copyright © 2020-2023  润新知