• 在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

  • 相关阅读:
    java n!乘阶之和的计算 ,1!+2!+...+20!
    java 进制转换
    jquery 获取元素的绑定事件的处理代码
    java 三维数组取值
    java 计算对数函数
    js 各浏览器不兼容方法 replaceAll 解决
    SourceMap编解码原理
    如何重用浏览器tab打开页面
    npm相关知识
    关于appleScript的一些入门知识
  • 原文地址:https://www.cnblogs.com/wanhongnan/p/5743231.html
Copyright © 2020-2023  润新知