QT调用Delphi生成的COM组件

    COM(Component Object Model),是微软的一种组件对象模型,ActiveX、DirectX以及OLE等都是基于COM建立起来的,它是开发软件组件的一种方法,多个COM组件对象可以连接起来以形成应用程序或组件系统,并且组件可以在运行时、在不重新链接或编译应用程序的情况下被卸载或替换,因此,具有很大的灵活性。

    在COM中,接口就是一切,它完全与语言无关,只要它遵循接口标准,就可以被不同语言进行调用,因此,便于快速构造应用程序、与语言无关的组件库。

    接下来,记录一下QT应用程序中如何调用Delphi生成的COM组件的步骤:

Delphi篇  

    1. Delphi项目新建: (ActiveX Library项目建立)

     1.1 新建项目,然后保存到指定文件夹路径

        

    1.2 什么都不添加,生成DLL看看

        

    1.3 查看导出函数

    复制vc的dumpbin.exe和相关exe到工程目录,方便查看:

    

        然后,打开命令行工具,进入到工程目录,执行命令(dumpbin.exe /exports {dll名字}.dll): 

        

        可以看到,1.2步骤声明的导出函数都已经导出了。

    2. 新建Automation Object并实现(这种对象可以不用导入库类型,而新建COM object需要)

    2.1 新建Automation Object,如无这个选项,自定义添加到菜单即可,方便后续添加:

    

    输入类名即可:

    

    创建后会新增一个pas文件,这里初始化了一个AutoObject对象:

    

    2.2 添加一个界面

    

            编写函数,用于实例化这个窗口:

            

    2.3 在DLL声明的导出函数调用,并模态形式显示窗口

            

    2.4 声明导出函数

            

    3. 查看函数是否正确导出

            OK, 没问题了。


QT篇

    1. 新建QT GUI应用程序项目

        

        默认下一步下一步即可,这里只是修改一下类名。

        

    2. 调用Delphi生成的COM组件dll    

    2.1 界面如下:

    

    2.2 添加槽

    

    

    因为使用了动态库,所以需要增加Activex模块库:

    

    实现:

    

注意:UUID是类的而不是接口的!    

2.3 生成的DLL拷贝到对应目录下:

    

    运行,看看如何:

    

    很好,调用成功了,后面就是有部分功能可以在delphi快速开发,有部分功能可以C++开发,充分利用不同语言上的优势进行开发了!