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

  • 相关阅读:
    Best Time to Buy and Sell Stock
    Remove Nth Node From End of List
    Unique Paths
    Swap Nodes in Pairs
    Convert Sorted Array to Binary Search Tree
    Populating Next Right Pointers in Each Node
    Maximum Subarray
    Climbing Stairs
    Unique Binary Search Trees
    Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/wanhongnan/p/5743231.html
Copyright © 2011-2022 走看看