在D语言中如何调用Windows中的COM控件

         Windows中COM组件是Windows中重要组成部分,可以注册成系统公共组件,也可以不注册直接调用。在D语言中调用COM组件前,我们需要了解COM组件。COM组件都有一个公共的接口,使用IDL语言编写,使用mild.exe编译器编译后生成tlb格式文件,通常叫做类型库,在生成COM组件的DLL时,会把这个文件放在DLL的资源文件中,资源名称叫做TYPELIB

image       要调用COM组件,先需要知道COM组件的接口,因此可以先从dll中把类型库导出成IDL接口文件,再把IDL接口文件转化为D语言的接口文件,这样就可以在D语言中使用COM控件了。

       一、提取COM文件中的接口为IDL文件

         把mscomm32.ocx文件拖放到VS中查看,如上图所示,可以看到TYPELIB资源,右键-->导出 文件,命名为mscomm32.tlb,文件是接口文件的编译格式,需要使用OLE/COM Object Viewer转为IDL文件。我们这儿使用d语言的一个工具tlb2idl.exe来转换,这个工具是visuald中的一个工具。转换时第三个参数需要指定IViewers.dll的路径,实际上也是使用OLE/COM Object Viewer来进行转换。

image         转换成功后,成重i.dll文件,如图:

image

      由于tlb2idl.exe程序是使用LoadTypeLib函数来加载类型库,所以需要先把类型库从DLL中导出来,如果使用LoadTypeLibFromResource函数直接从exe/dll中读取类型库,则可以直接从exe/dll中导出idl文件。使用LoadRegTypeLib函数则可以直接导出已经注册的COM控件接口。

 

      二、把idl文件转换为D语言接口

       转换idl为D语言可以使用visualD的vsi2d.exe工具完成。

image       这样就生成了i.d的文件,即为mscomm32.ocx的接口文件。

image

  

      三、调用COM控件

      有了COM控件的接口,使用COM控件已经完成了一大半,现在只是需要来使用COM控件就可以了。调用COM控件需要以下几步:

     1)使用LoadLibrary加载dll文件

     2)使用GetProcAddress得到DllGetClassObject函数指针

     3)通过调用DllGetClassObject函数指针获得IClassFactory工厂。

     4)调用IClassFactory工厂的CreateInstance函数创建实例。

     5) 把实例的指针转化为接口,之后就可以使用了。

    

参考:http://blog.csdn.net/wangqiulin123456/article/details/8962453

参考C++:http://blog.csdn.net/haijun286972766/article/details/6273414

参考C++:http://www.cnblogs.com/cpper-kaixuan/p/3540446.html?utm_source=tuicool&utm_medium=referral

原文地址:https://www.cnblogs.com/wanhongnan/p/5743231.html