2010-09-23 78 views
1

我知道这个问题可能因新的替代方案而异常,但请相信我,这是有原因的。在Qt中使用mscomm ActiveX

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

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

Visual C++ 6有一个mscomm.h和mscomm.cpp,我认为它实现了活动的x接口,但是大量的微软mfc宏和依赖关系遍布世界各地。

任何线索?

+0

你应该张贴答案的问题,因为答案不是编辑它变成你的问题。 – murgatroid99 2011-08-24 18:52:41

回答

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