Qt創建DLL與exe交互_第1頁
Qt創建DLL與exe交互_第2頁
Qt創建DLL與exe交互_第3頁
Qt創建DLL與exe交互_第4頁
Qt創建DLL與exe交互_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Qt創建DLL與Exe交互這倆天研究下qt下Dll。% Npv Project"UliQuoose 迅 tenplat t.3t C+D tnejDesi pttr Wide4Pr d電 cA £r >n Vofei a九 C er. tr &li 1 Jjiipvrl&NL DizictuiyCustofi BBL Et«uloA riudriEmpty U t Pro j « 2 iO Imt £ri stinj; I rejectCTO色*唱g >g =44- librmr尹 $轉。鼻 也襄 Th1! 電 Be

2、 ustd to cr-t4<-e:1 0 skurd O*Em? uco vl thQPlviginlciadex: wd rwiin-e (Tl$iTis)* 0<?r sialic 44 1 its-ary f?rwith. arotiLeE- pk<ajiect at linkLine首先我們創建一個庫的工程。選擇Other Project -> C+ Library曹呼屮叱巴,”。在紅色區域更改項目名稱。Next后進入選擇庫類型界面,默認是 下個界面選擇編譯器,直接 Next默認選擇的是 QtCore,如果你的Dll有圖形界面,則需要 QtGui,需要訪問數據

3、庫 QtSql,依 次類推。當然,創建通用的庫,就不需要選擇了。下個界面直接Next ,這樣工程就創建成功了。白imt-i 1 edunt i flea, pr-話“遼 h | uiernunaesr. h白J Scrarcw4userm anagar. cpj但是個人建議吧這里默認生成的頭文件更改一下。然后再加一個同名的cppS'teus era mcer nsennanacer. proJte ad«rsm £3I rummrglobal一 h 可erm anaer 一 K-Sources改后頭文件増加卬P文件在編寫之前我們應該看以下.pro文件以確認我們的工程

4、是否正確TARGET usermanagerTEMPLATE = libDESTDTR . ./test-build.da sk top/debug/DEFINES += U3ERMANAGER LIBRARY ISOURCES 十=uaermfliiager. cpp luserglobal + cppH£LZLL>E:RS += U3ernLSHS.ger h Iuaerglobal.h綠色區域:提供的是項目名稱也是Dll生成后的名字。藍色區域:說明了生成的是庫文件,而非.Exe文件紅色區域:給定了庫生成的目錄。灰色區域:給定了外部宏定義,這里定義的是庫德宏。紫色區域:是庫

5、的依賴文件。首先我們應該編寫對外接口。即 luserglobal.h#ifzidef IU S E RGLQB AIi_Hdefine IUSERGIiQBAL_H#include <t-Core/ q;gloha_L - h>#if defined (USERMAHAGERLIBRARY)# d.e£ir.e UgERMANAGERSHAaED EXF ORT Q_DE CL EXPORT eiae# define V5ERhl£AGERSliARED_EKFORT Q_PEORT #end.iE我們會看到這樣幾句,不要管他把USERMANAGERSHARED

6、 EXPORT復制出來因為我們,寫庫函數需要用到。然后,我們該寫我們的接口了。寫接口的時候要按照“復用”,“需求”,“封裝” 3個特性進行封裝接口。復用:指的是你寫的接口不是針對某一個工程,而是針對某一類功能而進行封裝。需求:寫出來的接口必須能夠滿足,使用DLL的需求,提供的功能要少,但是要全。Dll封裝:這個封裝并不是Dll自帶的封裝特性,而是在寫接口的時候要注意,不要把里的成員提供出去。而只是提供對應功能。(這里說一下,提供一個成員,還不如寫個類來的方便,做 DLl的 意義就沒有了。)好了開始寫我們的接口吧。第一,我們要確認,對 DLL的需求。是否可以操作,DLL是否需要通知給調用者。第二

7、,我們要確認,我們的 DLL屬于的類型,比如界面 DLL,功能DLL等等。 第三,我們的DLL,有幾個默認的庫函數。(建議越少越好)就啰嗦到這里了。開始吧。我的DLL功能顯示一個界面所以我給預留的操作接口是(下圖)1511718192014 B class lU36rCojitrolpublic:void showWindow (匚; vir七口曰丄 void closeWindow( virtual void hidewindow()=0;2本著見名知意的原則,要是看不懂就別繼續看了。這樣我們的接口預留的就可以了。(對于我的程序足夠了)在這里需要說一下,接口是根據的你的程序需求而定,并非統一

8、規格。做完這些,我們就可以,把一個簡單庫函數添加進來了J1 extern22 33 aMAWArERaHARBp_UXFORT TUserControL " GreateUser(TUscrWntify 土 pNotify-r)34 -根據格式,返回操作接口,接受通告接口。接下來,實現我們的DLL功能m er an stiveruse rm ana ger, pro- 'j SorurcezI Hmr 裂obal,epp把對應的功能寫到對應的文件內,如果功能多,可是適量添加文件。曰| Ius*rglftbal. h| J userm anager. h- r S o ur c

9、 e s I7? In話巳fpFusermanager. cp®在庫頭文件,對應的 Cpp中實現庫接口函數。1011include wIuserglcibal.h" tinclude "usermanager.h"lUseTrCoiitrol* CreatetJser (lUseirNotif y *pNotl fyr 亠口 = 口會的 Uaexzn&n&r (p);pNatif y->ehild.,en (ITJserNotif y: ! OVEH):retu rn (IUserContn;以上內容是基礎框架,按照這個框架寫,寫出

10、來的就是好DLL。好了 DLL完成了。我們在寫個測試程序吧。S 血 t«stTj | In詐rglobal, h di slog, hl 玄 5pureesI di O o p. cppm 魚5. epp包涵DLL的頭文件。d啟壬 DIAWG_H define#include <QtGui/QDialog>#include "Iuserg'lobal .h."u fi9101112131415117IBIS202122class Dialog : public QDialogrpublic lUaerNotifyQOBCTECT

11、public:Qi gleg (QWj.dg-e't parent = 0 ); void children(int w);-wDialog ();public slot呂:void showHyWindow();private:QWidge七in_Iffidge-t;; _二"土Lf / DJAlrOS HI。h文件內容 繼承通告接口接受通告信息#includ« "dialog,hn# include <QDebu g>#include <QPushBut'ton>Dialog:iDialog(QWidget parent): QDralog(parent)QPushBu tto口 *bt/n = new QPushButton (thi);connec七(btn t SIGNAL (clic ked ( ) this t SLOT1 (showMyWindow (); resize(800f 600);P-2Dialog:Dialog()b.60.5E0Blvoid Dialog: :children (in't w)if (w = TUserNotify: :OTER) IqDebug ()«"

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論