1. 程式人生 > 實用技巧 >Qt 開發的介面程式封裝成DLL,在VC中成功呼叫

Qt 開發的介面程式封裝成DLL,在VC中成功呼叫

  最近手頭的一個專案需要做一個QT介面,並且封裝成DLL,然後再動態呼叫DLL給出的介面函式,使封裝在DLL內部的QT介面跑起來,在網上查了很多資料,今天終於成功了,經驗不敢獨享,因為CSDN給了我很多幫助,將心得寫在這裡供大家參考。

  PS:本文中談的是用QT封裝一個包含介面的DLL,然後在其他任何地方使用任何語言來呼叫這個DLL,不是那種在qt creator裡面建一個dll工程,然後再在qt creator裡建一個呼叫該dll的工程的情況(這種示例可參考該連結http://download.csdn.net/source/2855817)。

本文所講的例子在qt 4.7.3 opensource 以及VC6.0/VS2005成功執行



  首先,在qt creator中是可以直接建立一個C++ DLL工程的,編譯以後也可以生成dll,但是這樣生成的dll拿VC去調是不會成功的。後來在CSDN上看到有人發的這樣一篇帖子(原文連結http://blog.csdn.net/normallife/article/details/5397980)。裡面談到 “因為 QT 必須有呼叫 QApplication 的 exec 方法,這樣才能產生訊息迴圈, QT 的程式才可以執行。所以說如果我們使用了 QT 編寫了 dll 程式,在普通的 windows 程式中是不能呼叫的。在呼叫的時候會出現錯誤。當然 QT 提供瞭解決方法:那就是 QTWinmigrate”。喜出望外啊,趕緊的把QTWinmigrate下下來。

  開啟QTWinmigrate資料夾,裡面有幾個目錄,buildlib,doc,examples,lib,src。
  在examples目錄下給出幾個應用QTWinmigrate的例子,其中有一個就是qtdll,嘿嘿,用qt creator開啟其中的qtdll.pro工程檔案。因為這個是已經做好的程式,所以可以直接在此基礎上修改。右鍵單擊目錄樹最上層的工程名qtdll,選擇“新增新有檔案”,然後新建一個“QT設計師介面類”,類名什麼的自己填上,點確定返回,可以看到字尾為.ui的介面檔案及介面檔案的.h檔案和.cpp檔案已經加入到qtdll工程裡面了,介面你怎麼畫都行,剩下的步驟就是修改工程中的main.cpp檔案

首先在main.cpp檔案裡面把介面檔案的標頭檔案include進來,然後將DLL釋出介面函式的部分修改為如下所示:

Cpp程式碼
1 extern "C" __declspec(dllexport) int main(int argc, char *argv[])  
2 {  
3   QApplication a(argc, argv);  
4   ****** w;  
5   w.show();  
6   return a.exec();  
7 }  

其中******是你介面檔案的.h檔案中定義的介面類名
  這樣我們得DLL就做好了,然後點構建,就可以生成封裝了QT介面並且可以用VC呼叫的DLL了