2010-09-23 83 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);