最近手頭的一個項目需要做一個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發布接口函數的部分修改為如下所示:
- extern "C" __declspec(dllexport) int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- ****** w;
- w.show();
- return a.exec();
- }
其中******是你界面文件的.h文件中定義的界面類名
這樣我們得DLL就做好了,然后點構建,就可以生成封裝了QT界面並且可以用VC調用的DLL了
在CSDN的第一篇技術貼,說的不詳細的大家有什么不懂的可以問我,文章中有什么不對的歡迎大牛指教
轉載:http://topic.csdn.net/u/20110706/20/200af06e-5010-4667-8f83-3c3cfb46cacd.html
http://qimo601.iteye.com/blog/1675575