适用:本文只针对com接口的基本使用方法记录,即获取一个com接口库如何安装及用C++调用其中的接口。不包括com接口的编写。
获取:假设现得到一个com接口库pta.dll。
安装:在cmd命令行内运行:regsvr32 PTA.dll,得到图示表示安装成功。安装成功的意思是已经将pta.dll库的注册到注册表中,相当于该库的功能已经挂接到系统中,可供调用。
使用:
com是语言无关的接口,可以使用常见的语言调用,现演示的是使用vc++(vs2005)来调用:
(1)生成pta.dll的头文件。没有头文件,则无法使用接口函数等,无法编译通过。com接口遵循“IDL(接口描述语言)”,通过vs2005的集成imdl工具即可简单地将idl语言转换成“.c,.h”文件。在vs studo工具里面的“工具->外部工具“里面增加OleView.Exe工具。如图。
成功后可以通过"工具->OLE/COM对象查看器"打开该工具,如图可打开pta.dll接口查看它的idl语言。
将打开的idl语言另存为pta.idl文件,然后在自己的vs工程里引入此文件,对该文件进行单独编译,会生成相应的”.c .h“文件,具体文件名在属性里面可配置。在生成的过程中有可能会出错,这是因为工具不是太完美,生成的代码会有一两处错误,比如某个接口未定义,这里要手动改一下定义的顺序等等,这些都是灵活变通就可以解决的。
将成功生成的pta.h,pta.c文件加入自己的工程,此时可以从工程移除pta.idl文件。
新建一个main.cpp作测试,要include的文件为windows.h和刚生成的pta.h文件。
初始化com: CoInitialize(NULL);
获取pta接口:
从生成的pta.h,pta.c中代码分析便可以知道有哪些接口,并且它的clsid和每个接口的riid号(关于clsid和riid号:都是guid号,编写接口的时候就已经定义好,就理解为一级目录和二级目录,通过这两个编号能确定一个接口,对c++来说就是一个类)。
IiTrusPTA * puk;//比如要用pta.h里面的这个接口
HRESULT hr = CoCreateInstance(CLSID_iTrusPTA,NULL,CLSCTX_INPROC_SERVER,IID_IiTrusPTA,(LPVOID *)&puk);
获取成功后puk就是该接口,可以根据pta.h头文件定义的函数进行调用使用。
释放: 程序退出调用:CoUninitialize();
总结: 以上便是普通的com接口一般流程。