在Qt中使用mscomm ActiveX

时间:2010-09-23 12:24:13

标签: qt activex mscomm32

我知道这个问题可能看起来很奇怪,因为现有新的选择,但相信我有一个理由。

我想使用mscomm active X控件通过串口与Qt进行通信。 是的,我知道有QextSerialPort,QSerialDevice以及很多关于如何编写串行通信代码的例子。但是由于我遇到的问题,我想测试mscomm。

我知道Qt有一个使用ActiveX控件的系统,但是我找不到关于如何使用它们的任何明确信息(我不明白这个qt官方文档)。

Visual C ++ 6有一个mscomm.h和mscomm.cpp,我认为它实现了活动的x接口,但是到处都有很多微软的mfc宏和依赖。

有任何线索吗?

1 个答案:

答案 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);