我知道这个问题可能看起来很奇怪,因为现有新的选择,但相信我有一个理由。
我想使用mscomm active X控件通过串口与Qt进行通信。 是的,我知道有QextSerialPort,QSerialDevice以及很多关于如何编写串行通信代码的例子。但是由于我遇到的问题,我想测试mscomm。
我知道Qt有一个使用ActiveX控件的系统,但是我找不到关于如何使用它们的任何明确信息(我不明白这个qt官方文档)。
Visual C ++ 6有一个mscomm.h和mscomm.cpp,我认为它实现了活动的x接口,但是到处都有很多微软的mfc宏和依赖。
有任何线索吗?
答案 0 :(得分:1)
好吧,好像我实现了它。
您必须使用QAxObject来包装要执行的activeX。为此,您需要知道CLSID,在我的情况下:
QAxObject* activex = new QAxObject("648A5600-2C6E-101B-82B6-000000000014");
然后您只需要使用dynamicCall(QString,QVariant)来调用ActiveX控件所具有的任何成员。要生成所有可用方法的列表,请使用:
QString doc = activex->generateDocumentation();
这很棒,你得到一个包含所有可用成员,属性和示例的html文档,解释如何使用它们(Qt文档告诉你可以使用 dumpdoc 生成相同的信息)
这里有一个关于如何打开端口(端口号4)的示例:
QAxObject* activex = new QAxObject("648A5600-2C6E-101B-82B6-000000000014");
activex->dynamicCall("SetCommPort(int)", 4);
activex->dynamicCall("SetPortOpen(bool)", true);