動態(tài)鏈接庫DLL編程深入淺出_第1頁
動態(tài)鏈接庫DLL編程深入淺出_第2頁
動態(tài)鏈接庫DLL編程深入淺出_第3頁
動態(tài)鏈接庫DLL編程深入淺出_第4頁
動態(tài)鏈接庫DLL編程深入淺出_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、這是VC+動態(tài)鏈接庫(DLL)編程深入淺出的第四部分,閱讀本文前,請先閱讀前三部分:(一)、(二)、(三)。MFC擴展DLL的內(nèi)涵為MFC的擴展,用戶使用MFC擴展DLL就像使用MFC本身的DLL一樣。除了可以在MFC擴展DLL的內(nèi)部使用MFC以外,MFC擴展DLL與應(yīng)用程序的接口部分也可以是MFC。我們一般使用MFC擴展DLL來包含一些MFC的增強功能,譬如擴展MFC的CStatic、CButton等類使之具備更強大的能力。使用Visual C+向?qū)a(chǎn)MFC擴展DLL時,MFC向?qū)詣釉黾覦LL的入口函數(shù)DllMain:上述代碼完成MFC擴展DLL的初始化和終止處理。由于MFC擴展DLL

2、導(dǎo)出函數(shù)和變量的方式與其它DLL沒有什么區(qū)別,我們不再細(xì)致講解。下面直接給出一個MFC擴展DLL的創(chuàng)建及在應(yīng)用程序中調(diào)用它的例子。6.1 MFC擴展DLL的創(chuàng)建下面我們將在MFC擴展DLL中導(dǎo)出一個按鈕類CSXButton(擴展自MFC的CButton類),類CSXButton是一個用以取代 CButton的類,它使你能在同一個按鈕上顯示位圖和文字,而MFC的按鈕僅可顯示二者之一。類CSXbutton的源代碼在Internet上廣泛流傳,有很好的“群眾基礎(chǔ)”,因此用這個類來講解MFC擴展DLL有其特殊的功效。MFC中包含一些宏,這些宏在DLL和調(diào)用DLL的應(yīng)用程序中被以不同的方式展開,這使得在

3、DLL和應(yīng)用程序中,使用統(tǒng)一的一個宏就可以表示出輸出和輸入的不同意思:導(dǎo)出一個類,直接在類聲明頭文件中使用AFX_EXT_CLASS即可,以下是導(dǎo)出CSXButton類的例子:把SXBUTTON.CPP文件直接添加到工程,編譯工程,得到“mfcexpenddll.lib”和“mfcexpenddll.dll”兩個文件。我們用Visual Studio自帶的Depends工具可以查看這個.dll,發(fā)現(xiàn)其導(dǎo)出了眾多符號(見圖15)。 圖15 導(dǎo)出類時導(dǎo)出的大量符號 這些都是類的構(gòu)造函數(shù)、析構(gòu)函數(shù)及其它成員函數(shù)和變量經(jīng)編譯器處理過的符號,我們直接用_declspec(dllexport)語

4、句聲明類就導(dǎo)出了這些符號。如果我們想用.lib文件導(dǎo)出這些符號,是非常困難的,我們需要在工程中生成.map文件,查詢.map文件的符號,然后將其一一導(dǎo)出。如圖16,打開DLL工程的settings選項,再選擇Link,勾選其中的產(chǎn)生MAP文件(Generate mapfile)就可以產(chǎn)生.map文件了。 打開mfcexpenddll工程生成的.map文件,我們發(fā)現(xiàn)其中包含了圖15中所示的符號(symbol)圖16 產(chǎn)生.map文件 所以,對于MFC擴展DLL,我們不宜以.lib文件導(dǎo)出類。6.2 MFC擴展DLL的調(diào)用在DLL所在工作區(qū)新增一個dllcall工程,它是一個基于對話框的

5、MFC EXE程序。在其中增加兩個按鈕SXBUTTON1、SXBUTTON2,并設(shè)置其屬性為“Owner draw”,如圖17。圖17 設(shè)置按鈕屬性為“Owner draw”在工程中添加兩個ICON資源:IDI_MSN_ICON(MSN的圖標(biāo))、IDI_REFBAR_ICON(Windows的系統(tǒng)圖標(biāo))。修改工程的“calldllDlg.h”頭文件為:同時,修改“calldllDlg.cpp”文件,使得m_button1、m_button2成員變量與對話框上的按鈕控件建立關(guān)聯(lián):修改BOOL CCalldllDlg:OnInitDialog()函數(shù),在其中增加對兩個按鈕設(shè)置ICON的代碼:運行程

6、序,將出現(xiàn)如圖18的對話框,圖形和文字同時出現(xiàn)在按鈕上,這說明我們正確地調(diào)用了MFC擴展DLL。圖18 DLL擴展的按鈕被顯示如果我們不修改void CCalldllDlg:DoDataExchange(CDataExchange* pDX),即不增加下列代碼:我們也可以在BOOL CCalldllDlg:OnInitDialog()函數(shù)中添加如下代碼實現(xiàn)m_button1、m_button2與IDC_BUTTON1、IDC_BUTTON2的關(guān)聯(lián):但是,DDX_Control與按鈕類的SubclassDlgItem成員函數(shù)不能同時存在,否則程序會出錯。6.3 總結(jié)由以上分析可知,MFC擴展DLL的導(dǎo)出與引用方式與前幾節(jié)所講述的方式?jīng)]有太大的差別,MFC擴展DLL主要強調(diào)對MFC進(jìn)

溫馨提示

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

評論

0/150

提交評論