qt版本5.13.0(MSVC版本)
qtcreator版本4.9.1;
使用编译器:Microsoft Visual C++ Compiler 14.0(amd64)
TurBo Pmac为了支持在windows系统下开发人机界面,提供了动态链接库,
以前提供的动态库是PComm32 Pro Libray(已经废弃);
新版本的函数库是PcommServer Pro2 Libray,是基于com组件的形式提供的,用户通过安装PMAC Executive pro2 suite_xxx软件包,在系统盘里可以找到pcommserver.exe,pcomm32W.dll,pcomm32W.lib三个文件;
这里我们采用引用头文件的方式。
但是找不到动态库的头文件,怎么办?泰道公司提供了如何在VC++6.0环境下通过pcommserver.exe导出接口类的说明文档,而在QT环境下并没有介绍如何调用库函数。
具体方法:
首先了解,PcommServer Pro2 Libray其实提供了com接口;QT又提供了QAxContainer模块,该模块支持我们使用com对象,
以及嵌入ActiveX控件,
1.通过Visual Studio中工具栏中OLE/COM对象查看器,查找类型库,可以找到pcommserver.exe的类型库ID号;
我的ID号是 {50ECCF67-B73C-431B-A53D-9EDDAF3CE611}
(如果没有OLE/COM对象查看器,你可以自己在网上找一个安装到自己电脑上)
我是自己安装的OLE/COM对象查看器;
2.QT提供了一个名为dumpcpp的工具可以根据类型库ID号生成一个C++命名空间,同时生成头文件和cpp文件。
首先将dumpcpp工具所在bin目录添加到系统路径(系统变量里);
工具一般路径:C:\Qt\Qt5.13.0\5.13.0\msvc2015_64\bin\dumpcpp
运行cmd命令,打开命令行窗口,cd到你自己的一个目录里敲入这段命令:
dumpcpp -n PCOMMSERVERLIB {50ECCF67-B73C-431B-A53D-9EDDAF3CE611}
运行后,会在你自己的目录里生成俩个文件;
pommserverlib.cpp
pommserverlib.h
我们可以给他改一下名字例如改成:
PmacDevice.cpp
PmacDevice.h
(PCOMMSERVERLIB是命名空间)
3.在QT工程管理文件.pro里添加 CONFIG += qaxcontainer,
在你自己定义的窗口类里包含头文件PmacDevice.h,并引入命名空间:using namespace PCOMMSERVERLIB
定义成员指针: PCOMMSERVERLIB::PmacDevice *Pmac;对象指针
在自己的文件里实现
Pmac = new PCOMMSERVERLIB::PmacDevice;
然后可以像调用普通QT类一样调用命名空间的函数,来和控制器通信了;亲测有效;
注意:
编译时会报“使用了未定义的类型”错误;
把PmacDevice.h文件里6470行代码PCOMSERVERLIB::DEVUPLOAD pUpload改成指针形式:
PCOMSERVERLIB::DEVUPLOAD *pUpload;
inline void Upload(int dwDevice, PCOMSERVERLIB::DEVUPLOAD *pUpload, QString& pData, int& pstatus);
还有9917行也改为指针形式;等(可以是指针引用)
————————————————
版权声明:本文为CSDN博主「qq_26251903」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_26251903/article/details/102676851