MFC DLL的生成和調(diào)用實例_第1頁
MFC DLL的生成和調(diào)用實例_第2頁
MFC DLL的生成和調(diào)用實例_第3頁
MFC DLL的生成和調(diào)用實例_第4頁
MFC DLL的生成和調(diào)用實例_第5頁
全文預覽已結(jié)束

下載本文檔

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

文檔簡介

1?打開VS2012,依次選擇文件一新建一項目一MFCDLL,在下方名稱欄中輸入工程命名OneDLL,在位置欄中選擇存放工程文件的路徑一確定一點擊下一步一DLL類型:使用共享MFCDLL的規(guī)則DLL—點擊完成。其中我們感興趣的是OneDLL.cpp文件和OneDLL.def文件。OneDLL.cpp文件是DLL的主要的源代碼文件,它包含了 COneDLLApp類的定義;OneDLL.def文件包含了DLL提供的關(guān)于DLL在Windows下運行的一些信息,在這個文件中定義了一些參數(shù),如DLL的名稱和屬性等,還聲明了從DLL中輸出的函數(shù)。添加實現(xiàn)代碼,黑色加粗部分為添加的代碼。#include"stdafx.h"#include"OneDLL.h"#ifdef_DEBUG#definenewDEBUG_NEW#endifintMessage(void);BEGIN_MESSAGE_MAP(COneDLLApp,CWinApp)END_MESSAGE_MAP()//COneDLLApp構(gòu)造COneDLLApp::COneDLLApp(){//TODO:在此處添加構(gòu)造代碼,//將所有重要的初始化放置在InitInstance中}//唯一的一個COneDLLApp對象COneDLLApptheApp;//COneDLLApp初始化BOOLCOneDLLApp::InitInstance()CWinApp::InitInstance();returnTRUE;intMessage(void){MessageBox(NULL,_T("ThisistheexampleoftestingDLL."),NULL,MB_OKCANCEL);return1;}記得設(shè)為為多字節(jié)而非unicode編碼。修改.def文件:OneDLL.def:聲明DLL的模塊參數(shù)。LIBRARY"OneDLL"EXPORTSMessage;此處可以是顯式導出點擊生成——生成解決方案,可以生成相關(guān)的lib文件和dll文件,在OneDLL'Debug進行查看生成的文件。新建調(diào)用DLL(OneDLL)的MFC工程。新建一個基于MFC框架的單文檔工程,并在TestDLLView.cpp文件開始處添加HINSTANCEhandlerDLL=NULL;typedefint(*MESSAGE)(void);MESSAGEMessage;然后在菜單中添加DLL主菜單、子菜單,如下圖所示,以及View類下的菜單響應函數(shù)。子菜單ID分別為IDDLLLOAD和IDDLLTESTFile:DLL:旦巳IpLoadDLLT云DLLvoidCTestDLLView::OnDllload(){//TODO:在此添加命令處理程序代碼if(handlerDLL!=NULL){MessageBox(_T("TheOneDLL.DLLhasbeenloaded."));return;}handlerDLL=LoadLibrary(_T("OneDLL.DLL"));if(handlerDLL==NULL){MessageBox(_T("CannotLoadtheOneDLL.DLL"));}else{MessageBox(_T("LoadtheOneDLL.DLLsuccessful!"));}Message=(MESSAGE)GetProcAddress(handlerDLL,_T("Message"));}voidCTestDLLView::OnDlltest(){//TODO:在此添加命令處理程序代碼if(handlerDLL==NULL)

MessageBox(_T("PleaseLoadtheOneDLL.DLLfirst."));return;}Message();}接著,進行生成 生成解決方案,提示如下錯誤:通過查看是Message=(MESSAGE)GetProcAddress(handlerDLL,_T("Message"));引起的,解決辦法是:右擊視圖欄中的工程名一一屬性一一項目默認值一一字符集一一使用多字節(jié)字符集(原來是使用Unicode字符集) 確定,重新生成解決方案,錯誤消失。XT+■n31errorC26M:"GetPtocAddresH不斷皺2肚"mn"wchar_t罔"埠融"LPCETR-t&stdllview.cpp156占2IntelliSense; ■|DDLiU0lAD,TestDLLVievr.cpp35I3IntslliSen&B:來主!W看期nDDLLTEST'TestDULView匚鬧>36'4IntelliSen?:'conti佃:崩r_t趣的宴與1LPCETR'趣茁恿毎不稠TestDLLViffjir.Epp156打開OneDLL工程,右擊視圖欄中的工程名一一屬性一一配置屬性一一常規(guī)一一輸出目錄設(shè)置為TestDLL\Debug,然后點擊生成——生成解決方案,就可以在TestDLL\Debug路徑下生成相關(guān)的lib文件和dll文件以供調(diào)用。Data(DQ?LiuYaqiangkvs20l2kTestDLL名稱DLL主成前Te-siDLL.exe口Te&tDLL.ilkgDLL主成前名稱Data卜LiuYaqiang卜vs20l2卜TestDLL卜D已bug名稱迪OneDLLdll2013/12/1Z檸OneDLL.expDLL知娠 £013/12/1£DOneDLL.ilk2013/12/1SOOneDLL.lib2013/12/12呂OneDLLpdlbTe5.tDLL.exe-灤理浚■DTettDLLillc1"織:W"l]呂Tes-tDLLpdb2013/12/12修煎日期打開TestDLL工程,并允許該工程。打擊菜單DLL——LoadDLL,彈出下面的對話框,說明DLL載入成功,單擊確定。然后單擊DLL——TestDLL,彈出下面的對話框,說明DLL調(diào)用成功。如果提示CannotLoadtheOneDLL.DLL,說明設(shè)置的調(diào)用DLL的路徑有問題;如果提示TheOneDLL.DLLhasbeenloaded.說明DLL已經(jīng)載入了。至此,整個實驗已經(jīng)結(jié)束,如果有興趣,自己可以動手試試。在設(shè)置DLL的生成目錄時,通過瀏覽按鈕,你選擇目的路徑,系統(tǒng)會自動生成為相應的相對地址..\..\TestDLL\Debug。..\..\TestDLL\Debug代表相對路徑;D:\LiuYaqiang\vs201

溫馨提示

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

評論

0/150

提交評論