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++开发,充分利用不同语言上的优势进行开发了!