Qt 下的COM組件開發

來源:互聯網
上載者:User

     Qt下的COM組件開發著實讓人害怕,因為不是簡單的調用,而是需要人為的去封裝一下COM,然後在封裝的基礎上去使用COM中的方法和類。我們習慣了VC編譯器帶來的便利,通過VC編譯器,只需直接import一下組件編譯器就能自動幫我們匯出COM的tlh描述檔案,接下來使用者就能很方便的去調用介面,使用方法。

       最新的Qt直接可以下載SDK,這些SDK直接基於MinGW編譯器,所以如果想按照VC的那套方式來使用COM組件,那行不通(會報編譯器不支援的錯誤),必須讓Qt的源碼在VC下編譯才能使用。如果使用者需要在MinGW編譯器下使用COM組件,需要瞭解一下Qt對COM組件的封裝類。我用的Qt版本是4.7,裡面會用到QAxObject和QAxWidget類。QAxObject是對COM組件的封裝,QAxWidget是對ActiveX控制項的封裝,簡單理解功能性的封裝我們一般就是普通的COM組件,如果涉及UI一般會用ActiveX控制項。有了這兩個類幾乎就可以開始簡單調用組件了。

     QAxObject和QAxWidget可以通過預設的建構函式建立一個空的COM組件對象(可以理解為COM容器),然後再把需要封裝的組件放到Null 物件中,代碼如下

    QAxObject   object((QObject)0);     //建立封裝容器

    object.setControl(QString::fromUtf8("{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"));
//填充需要封裝的COM組件到容器中

    或者我們把上面的兩步合并成一步,如下代碼

   QAxObjectobject("{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}");

   當然QAxWidget的代碼和上面類似。

       解決了匯入COM組件和封裝的問題,接下來最重要的就是如何使用介面和方法的問題。如果上面匯入處理程序涉及的CLSID(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)對應就是一個CoClass問題就好辦很多,直接可以調用這個CoClass的方法。當然如果你手中沒有COM組件的Qt方法說明,這件事依然很難入手。其實COM是個自描述的結構,任何第三方軟體是可以把這種描述化資訊自動匯出來的。Qt有方法可以自動匯出來的,參考如下代碼

         QStringdoc=
object.generateDocumentation();  

       
QFile outFile("c:/debuglog.html");

        outFile.open(QIODevice::WriteOnly|QIODevice::Append);QTextStreamts(&outFile);

        ts<<doc<<endl;

       匯出後你會發現是一個非常好的HTML格式的協助問題,裡面對每一個方法都有調用的詳細描述。參考說明後就能開始自己調用了,

       QVariantListparams0;

       params0<<QVariant((int)(w.winId()));

       params0<<QVariant(1);

       params0<<QVariant("License");

       params0<<QVariant("");

      object.dynamicCall("ShowStatusDialog(int,int,QVariant,
QVariant)",params0); 


      上面的方法就能完成大部分的工作,如果方法中涉及很多的介面,我建議採用VC,Qt中比較麻煩,如果非要用就考慮匯出COM組件的代理類。Qt內建的工具是dumpcpp,可以在Qt安裝後的目錄下找到DOS環境的捷徑,然後直接運行dumpcpp,參考dumpcpp的協助即可。匯出後的檔案是.h,.cpp檔案,加入到工程中,很不幸,這些匯出的.h,.cpp檔案不一定能直接用,因為很多自訂的介面變數在匯出過程中被忽略了,例如有的變數是int64,但是Qt中沒有這個變數,如果有的變數是基於int64定義的,極有可能會報錯,應為你要手工把定義指定為qlonglong類型。其他的錯誤都類似,我們只需要把錯誤的地方修改成Qt的類型就可以。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.