1

我知道由于新的现有替代方案,这个问题可能看起来很奇怪,但相信我这是有原因的。

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

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

Visual C++ 6 有一个 mscomm.h 和 mscomm.cpp,我认为它们实现了活动的 x 接口,但到处都有大量的 microsoft mfc 宏和依赖项。

有什么线索吗?

4

1 回答 1

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);
于 2011-08-30T10:55:49.833 回答