版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Fundamentals of Computers暨南大學(xué)珠海學(xué)院Windows編程制作:劉曉翔2022-2-10第九講 動(dòng)態(tài)鏈接庫(kù)Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-102內(nèi)容安排內(nèi)容安排動(dòng)態(tài)鏈接庫(kù)動(dòng)態(tài)鏈接庫(kù)n Win32 DLL 的創(chuàng)建的創(chuàng)建n 顯式加載方式加載顯式加載方式加載DLLn DllMain函數(shù)函數(shù)n 動(dòng)態(tài)鏈接庫(kù)概述動(dòng)態(tài)鏈接庫(kù)概述n MFC DLLn 隱式鏈接方式加載隱式鏈接方式加載DLLFundamentals of Computers制作:劉曉翔JINAN Univers
2、ity暨南大學(xué)珠海學(xué)院Windows編程2022-2-103動(dòng)態(tài)鏈接庫(kù)概述動(dòng)態(tài)鏈接庫(kù)概述n動(dòng)態(tài)鏈接庫(kù)動(dòng)態(tài)鏈接庫(kù)不能直接運(yùn)行,不能接收消息不能直接運(yùn)行,不能接收消息。它們是一些獨(dú)立的文。它們是一些獨(dú)立的文件,其中包含能被可執(zhí)行程序或其它件,其中包含能被可執(zhí)行程序或其它DLL調(diào)用來(lái)完成某項(xiàng)工作的函調(diào)用來(lái)完成某項(xiàng)工作的函數(shù)。數(shù)。只有在其它模塊調(diào)用動(dòng)態(tài)鏈接庫(kù)中的函數(shù)時(shí),它才發(fā)揮作用只有在其它模塊調(diào)用動(dòng)態(tài)鏈接庫(kù)中的函數(shù)時(shí),它才發(fā)揮作用。n 微軟任何一個(gè)版本的微軟任何一個(gè)版本的Windows操作系統(tǒng),操作系統(tǒng),動(dòng)態(tài)鏈接庫(kù)動(dòng)態(tài)鏈接庫(kù)(DLL)都)都是其是其核心核心和和基礎(chǔ)基礎(chǔ)。n Windows API中的
3、所有函數(shù)都包含在中的所有函數(shù)都包含在DLL中。其中有中。其中有3個(gè)最重要的個(gè)最重要的DLL,Kernel32.dll,它包含用于管理內(nèi)存、進(jìn)程和線程的各個(gè)函數(shù);,它包含用于管理內(nèi)存、進(jìn)程和線程的各個(gè)函數(shù);User32.dll,它包含用于執(zhí)行用戶界面任務(wù)(如窗口的創(chuàng)建和消息的,它包含用于執(zhí)行用戶界面任務(wù)(如窗口的創(chuàng)建和消息的傳送)的各個(gè)函數(shù);傳送)的各個(gè)函數(shù);GDI32.dll,它包含用于畫(huà)圖和顯示文本的各個(gè),它包含用于畫(huà)圖和顯示文本的各個(gè)函數(shù)。函數(shù)。Dll 概述概述Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2
4、022-2-104動(dòng)態(tài)鏈接庫(kù)概述動(dòng)態(tài)鏈接庫(kù)概述靜態(tài)庫(kù)(靜態(tài)庫(kù)(LIB)和動(dòng)態(tài)庫(kù)()和動(dòng)態(tài)庫(kù)(DLL)n 靜態(tài)庫(kù):靜態(tài)庫(kù):函數(shù)和數(shù)據(jù)被編譯進(jìn)一個(gè)二進(jìn)制文件(通常擴(kuò)展函數(shù)和數(shù)據(jù)被編譯進(jìn)一個(gè)二進(jìn)制文件(通常擴(kuò)展名為名為.LIB)。在使用靜態(tài)庫(kù)的情況下,在編譯鏈接可執(zhí)行文)。在使用靜態(tài)庫(kù)的情況下,在編譯鏈接可執(zhí)行文件時(shí),鏈接器從庫(kù)中件時(shí),鏈接器從庫(kù)中復(fù)制復(fù)制這些函數(shù)和數(shù)據(jù),并把它們和應(yīng)用這些函數(shù)和數(shù)據(jù),并把它們和應(yīng)用程序的其它模塊組合起來(lái)創(chuàng)建最終的可執(zhí)行文件(程序的其它模塊組合起來(lái)創(chuàng)建最終的可執(zhí)行文件(.EXE文文件)。件)。n 在使用在使用動(dòng)態(tài)庫(kù)動(dòng)態(tài)庫(kù)的時(shí)候,往往提供兩個(gè)文件:的時(shí)候,往往提供兩個(gè)文
5、件:一個(gè)引入庫(kù)一個(gè)引入庫(kù)和和一個(gè)一個(gè)DLL。引入庫(kù)引入庫(kù)包含被包含被DLL導(dǎo)出的導(dǎo)出的函數(shù)和變量的符號(hào)名函數(shù)和變量的符號(hào)名,DLL包含實(shí)際的函數(shù)和數(shù)據(jù)包含實(shí)際的函數(shù)和數(shù)據(jù)。在編譯鏈接可執(zhí)行文件時(shí),只。在編譯鏈接可執(zhí)行文件時(shí),只需要鏈接引入庫(kù),需要鏈接引入庫(kù),DLL中的函數(shù)代碼和數(shù)據(jù)中的函數(shù)代碼和數(shù)據(jù)并不復(fù)制并不復(fù)制到可執(zhí)到可執(zhí)行文件中,在運(yùn)行的時(shí)候,再去加載行文件中,在運(yùn)行的時(shí)候,再去加載DLL,訪問(wèn),訪問(wèn)DLL中導(dǎo)出中導(dǎo)出的函數(shù)。的函數(shù)。Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-105動(dòng)態(tài)鏈接
6、庫(kù)概述動(dòng)態(tài)鏈接庫(kù)概述使用動(dòng)態(tài)鏈接庫(kù)的好處使用動(dòng)態(tài)鏈接庫(kù)的好處 增強(qiáng)程序的擴(kuò)展性增強(qiáng)程序的擴(kuò)展性 可以采用多種編程語(yǔ)言來(lái)寫可以采用多種編程語(yǔ)言來(lái)寫 提供二次開(kāi)發(fā)的平臺(tái)提供二次開(kāi)發(fā)的平臺(tái) 簡(jiǎn)化項(xiàng)目管理簡(jiǎn)化項(xiàng)目管理 節(jié)省磁盤空間和內(nèi)存節(jié)省磁盤空間和內(nèi)存 有助于資源共享有助于資源共享Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-106內(nèi)容安排內(nèi)容安排n Win32 DLL 的創(chuàng)建的創(chuàng)建n 顯式加載方式加載顯式加載方式加載DLLn DllMain函數(shù)函數(shù)n 動(dòng)態(tài)鏈接庫(kù)概述動(dòng)態(tài)鏈接庫(kù)概述n MFC DLLn 隱
7、式鏈接方式加載隱式鏈接方式加載DLL動(dòng)態(tài)鏈接庫(kù)動(dòng)態(tài)鏈接庫(kù)Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-107Win32 DLL 的創(chuàng)建的創(chuàng)建創(chuàng)建創(chuàng)建Dll文件文件 新建一個(gè)新建一個(gè) Win32 Dynamic-Link Library 工程,在工程,在AppWizard的第一步選擇的第一步選擇“An empty Dll project”,創(chuàng)建一個(gè)空,創(chuàng)建一個(gè)空的動(dòng)態(tài)鏈接庫(kù)工程。添加一個(gè)的動(dòng)態(tài)鏈接庫(kù)工程。添加一個(gè)C+源文件:源文件:Dll.cpp,在其中寫,在其中寫入如下代碼:入如下代碼:int ad
8、d(int a, int b)return a + b;int subtract(int a, int b)return a - b;Build后,在后,在Debug目錄下會(huì)產(chǎn)生一個(gè)目錄下會(huì)產(chǎn)生一個(gè)Dll1.dll文件。文件。Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-108Win32 DLL 的創(chuàng)建的創(chuàng)建導(dǎo)出導(dǎo)出DLL中的函數(shù)中的函數(shù) 注意注意:應(yīng)用程序如果想要訪問(wèn):應(yīng)用程序如果想要訪問(wèn) DLL中的函數(shù),那么該函數(shù)中的函數(shù),那么該函數(shù)必須是已經(jīng)必須是已經(jīng)被導(dǎo)出被導(dǎo)出的函數(shù)。的函數(shù)。 為了讓為了讓
9、DLL 導(dǎo)出函數(shù),需要在每一個(gè)將要被導(dǎo)出的導(dǎo)出函數(shù),需要在每一個(gè)將要被導(dǎo)出的函數(shù)前函數(shù)前添加標(biāo)識(shí)符:添加標(biāo)識(shí)符:_declspec (dllexport)。_declspec (dllexport) int add(int a, int b)return a + b;_declspec (dllexport) int subtract(int a, int b)return a - b;Build后,在后,在Debug目錄下會(huì)產(chǎn)生一個(gè)動(dòng)態(tài)庫(kù)目錄下會(huì)產(chǎn)生一個(gè)動(dòng)態(tài)庫(kù)Dll1.dll文件和一個(gè)文件和一個(gè)引入庫(kù)文件引入庫(kù)文件Dll1.lib。Fundamentals of Computers制作:劉曉
10、翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-109Win32 DLL 的創(chuàng)建的創(chuàng)建導(dǎo)出導(dǎo)出DLL中的類中的類 在動(dòng)態(tài)鏈接庫(kù)中,除了函數(shù)能被導(dǎo)出,在動(dòng)態(tài)鏈接庫(kù)中,除了函數(shù)能被導(dǎo)出,C+類同樣也類同樣也能夠被導(dǎo)出。能夠被導(dǎo)出。 為了讓為了讓DLL導(dǎo)出類,在導(dǎo)出類,在DLL中定義類時(shí),需要在中定義類時(shí),需要在class關(guān)鍵字和類名之間關(guān)鍵字和類名之間加入標(biāo)識(shí)符:加入標(biāo)識(shí)符:_declspec (dllexport)。 注意:注意:在訪問(wèn)導(dǎo)出類的函數(shù)時(shí),仍受限于函數(shù)自身的在訪問(wèn)導(dǎo)出類的函數(shù)時(shí),仍受限于函數(shù)自身的訪問(wèn)權(quán)限。也就是說(shuō),如果該類的某個(gè)函數(shù)訪問(wèn)權(quán)限不是訪問(wèn)
11、權(quán)限。也就是說(shuō),如果該類的某個(gè)函數(shù)訪問(wèn)權(quán)限不是Pubilc,那么外部程序仍無(wú)法訪問(wèn)這個(gè)函數(shù)。,那么外部程序仍無(wú)法訪問(wèn)這個(gè)函數(shù)。 另外,在實(shí)現(xiàn)動(dòng)態(tài)鏈接庫(kù)時(shí),可以不導(dǎo)出整個(gè)類,而另外,在實(shí)現(xiàn)動(dòng)態(tài)鏈接庫(kù)時(shí),可以不導(dǎo)出整個(gè)類,而只導(dǎo)出該類中的某些成員函數(shù)。具體做法是將標(biāo)識(shí)符添加只導(dǎo)出該類中的某些成員函數(shù)。具體做法是將標(biāo)識(shí)符添加到成員函數(shù)前。到成員函數(shù)前。Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1010內(nèi)容安排內(nèi)容安排n Win32 Dll 的創(chuàng)建的創(chuàng)建n 顯式加載方式加載顯式加載方式加載DLLn Dl
12、lMain函數(shù)函數(shù)n 動(dòng)態(tài)鏈接庫(kù)概述動(dòng)態(tài)鏈接庫(kù)概述n MFC DLLn 隱式鏈接方式加載隱式鏈接方式加載DLL動(dòng)態(tài)鏈接庫(kù)動(dòng)態(tài)鏈接庫(kù)Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1011隱式鏈接方式加載隱式鏈接方式加載DLLDLL測(cè)試程序測(cè)試程序 新建一個(gè)基于對(duì)話框的新建一個(gè)基于對(duì)話框的MFC應(yīng)用程序,在主對(duì)話框資源應(yīng)用程序,在主對(duì)話框資源上放置兩個(gè)按鈕上放置兩個(gè)按鈕“Add”和和“Subtract”,編寫如下響應(yīng)函數(shù):,編寫如下響應(yīng)函數(shù):void CDllTestDlg:OnAdd() CStrin
13、g str;str.Format(7 + 5 = %d, add(7,5);MessageBox(str);void CDllTestDlg:OnSubtract() CString str;str.Format(7 - 5 = %d, subtract(7,5);MessageBox(str);Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1012隱式鏈接方式加載隱式鏈接方式加載DLLextern int add(int a,int b);extern int subtract(int a,int
14、 b);void CDllTestDlg:OnAdd() CString str;str.Format(7 + 5 = %d, add(7,5);MessageBox(str);void CDllTestDlg:OnSubtract() CString str;str.Format(7 - 5 = %d, subtract(7,5);MessageBox(str);利用利用 extern 聲明外部函數(shù)聲明外部函數(shù) 以上程序編譯提示兩個(gè)錯(cuò)誤:不認(rèn)識(shí)函數(shù)以上程序編譯提示兩個(gè)錯(cuò)誤:不認(rèn)識(shí)函數(shù)add與與subtract。因此,需對(duì)這兩個(gè)函數(shù)做一個(gè)聲明。因此,需對(duì)這兩個(gè)函數(shù)做一個(gè)聲明。 extern 關(guān)
15、鍵字表明函關(guān)鍵字表明函數(shù)是在外部定義的數(shù)是在外部定義的Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1013隱式鏈接方式加載隱式鏈接方式加載DLL 以上程序能夠成功通過(guò)編譯,但在程序鏈接時(shí)會(huì)以上程序能夠成功通過(guò)編譯,但在程序鏈接時(shí)會(huì)產(chǎn)生三個(gè)錯(cuò)誤,因?yàn)榇藭r(shí)鏈接器不知道這兩個(gè)函數(shù)是產(chǎn)生三個(gè)錯(cuò)誤,因?yàn)榇藭r(shí)鏈接器不知道這兩個(gè)函數(shù)是在哪個(gè)地方實(shí)現(xiàn)的。在哪個(gè)地方實(shí)現(xiàn)的。 為了解決這個(gè)問(wèn)題,就需要利用動(dòng)態(tài)鏈接庫(kù)的為了解決這個(gè)問(wèn)題,就需要利用動(dòng)態(tài)鏈接庫(kù)的引引入庫(kù)文件入庫(kù)文件。引入庫(kù)文件并沒(méi)有包含實(shí)際的代碼,它是。引
16、入庫(kù)文件并沒(méi)有包含實(shí)際的代碼,它是用來(lái)為鏈接程序提供必要的信息,以便在可執(zhí)行文件用來(lái)為鏈接程序提供必要的信息,以便在可執(zhí)行文件中建立動(dòng)態(tài)鏈接時(shí)需要用到的重定位表。中建立動(dòng)態(tài)鏈接時(shí)需要用到的重定位表。使用引入庫(kù)文件使用引入庫(kù)文件Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1014隱式鏈接方式加載隱式鏈接方式加載DLL加入引入庫(kù)的兩種方法加入引入庫(kù)的兩種方法加載之前先把加載之前先把dll1.lib復(fù)制到復(fù)制到dlltest工程目錄中:工程目錄中:方法一:方法一: 選擇選擇“projectSetting
17、s”命令,選擇命令,選擇link選項(xiàng)卡,選項(xiàng)卡,在在“Object/library modules”選項(xiàng)編輯框中輸入:選項(xiàng)編輯框中輸入:dll1.lib方法二:方法二: 通過(guò)通過(guò)“add files to project”直接將直接將dll1.lib加加入到工程中。入到工程中。Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1015隱式鏈接方式加載隱式鏈接方式加載DLL 除了使用除了使用 extern 關(guān)鍵字表明函數(shù)是外部定義的之關(guān)鍵字表明函數(shù)是外部定義的之外,還可以使用標(biāo)識(shí)符:外,還可以使用標(biāo)識(shí)符:
18、_declspec (dllimport)來(lái)表明來(lái)表明函數(shù)是從動(dòng)態(tài)鏈接庫(kù)中引入的。函數(shù)是從動(dòng)態(tài)鏈接庫(kù)中引入的。 與使用與使用 extern 相比,使用相比,使用_declspec (dllimport) 將將告訴編譯器該函數(shù)是來(lái)源于動(dòng)態(tài)鏈接庫(kù),從而編譯器告訴編譯器該函數(shù)是來(lái)源于動(dòng)態(tài)鏈接庫(kù),從而編譯器可以生成運(yùn)行效率更高的代碼可以生成運(yùn)行效率更高的代碼。利用利用_declspec (dllimport) 聲明外部函數(shù)聲明外部函數(shù)_declspec (dllimport) int add(int a,int b);_declspec (dllimport) subtract(int a,int b
19、);Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1016隱式鏈接方式加載隱式鏈接方式加載DLL 為查看一個(gè)可執(zhí)行模塊依賴的動(dòng)態(tài)鏈接庫(kù),為查看一個(gè)可執(zhí)行模塊依賴的動(dòng)態(tài)鏈接庫(kù), Visual Studio提供了一個(gè)圖形化工具提供了一個(gè)圖形化工具Depends來(lái)實(shí)現(xiàn)。位于:來(lái)實(shí)現(xiàn)。位于:“Microsoft Visual Studio 6.0Microsoft Visual Studio 6.0 Tools”菜單中。菜單中。Depends工具工具 在在Depends窗口中,左上方的窗格中顯示了應(yīng)用程序窗
20、口中,左上方的窗格中顯示了應(yīng)用程序需要訪問(wèn)的需要訪問(wèn)的DLL文件名稱;當(dāng)選中其中的一個(gè)文件名稱;當(dāng)選中其中的一個(gè)DLL時(shí),時(shí),右上方的窗格列出了該右上方的窗格列出了該DLL中被可執(zhí)行程序調(diào)用的函數(shù);中被可執(zhí)行程序調(diào)用的函數(shù);右下方的窗格列出了右下方的窗格列出了DLL所導(dǎo)出的函數(shù)。所導(dǎo)出的函數(shù)。Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1017內(nèi)容安排內(nèi)容安排n Win32 DLL 的創(chuàng)建的創(chuàng)建n 顯式加載方式加載顯式加載方式加載DLLn DllMain函數(shù)函數(shù)n 動(dòng)態(tài)鏈接庫(kù)概述動(dòng)態(tài)鏈接庫(kù)概述n
21、MFC DLLn 隱式鏈接方式加載隱式鏈接方式加載DLL動(dòng)態(tài)鏈接庫(kù)動(dòng)態(tài)鏈接庫(kù)Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1018顯式加載方式加載顯式加載方式加載DLLLoadLibrary函數(shù)函數(shù)HMODULE LoadLibrary( LPCTSTR lpFileName); 該函數(shù)的作用是將指定的可執(zhí)行模塊映射到調(diào)用進(jìn)該函數(shù)的作用是將指定的可執(zhí)行模塊映射到調(diào)用進(jìn)程的地址空間。程的地址空間。LoadLibrary不僅能夠加載不僅能夠加載DLL,還可,還可以加載可執(zhí)行模塊(以加載可執(zhí)行模塊(*.e
22、xe),當(dāng)加載可執(zhí)行模塊時(shí),),當(dāng)加載可執(zhí)行模塊時(shí),主要是為了訪問(wèn)該模塊內(nèi)的資源,例如對(duì)話框資源、主要是為了訪問(wèn)該模塊內(nèi)的資源,例如對(duì)話框資源、圖標(biāo)或位圖資源。圖標(biāo)或位圖資源。 當(dāng)獲取到動(dòng)態(tài)鏈接庫(kù)模塊的句柄后,接下來(lái)需要獲當(dāng)獲取到動(dòng)態(tài)鏈接庫(kù)模塊的句柄后,接下來(lái)需要獲取該動(dòng)態(tài)鏈接庫(kù)中導(dǎo)出函數(shù)的地址。取該動(dòng)態(tài)鏈接庫(kù)中導(dǎo)出函數(shù)的地址。Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1019顯式加載方式加載顯式加載方式加載DLLGetProcAddress函數(shù)函數(shù)FARPROC GetProcAddress(
23、 HMOUDLE hModule, LPCSTR lpProcName); 該函數(shù)的作用是用來(lái)獲取該函數(shù)的作用是用來(lái)獲取DLL導(dǎo)出函數(shù)的地址。導(dǎo)出函數(shù)的地址。 hModule:指定:指定DLL模塊的句柄,即模塊的句柄,即LoadLibrary函數(shù)函數(shù)的返回值。的返回值。 LpProcName:字符指針,指定:字符指針,指定DLL導(dǎo)出函數(shù)的名字或?qū)С龊瘮?shù)的名字或函數(shù)的序號(hào)。函數(shù)的序號(hào)。Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1020顯式加載方式加載顯式加載方式加載DLL顯示加載顯示加載DLL實(shí)例
24、實(shí)例void CDllTestDlg:OnAdd() HMODULE hModule;hModule = LoadLibrary(Dll1.dll);typedef int (*FUNC) (int a, int b); /定義函數(shù)指針類型定義函數(shù)指針類型FUNC add = (FUNC)GetProcAddress(hModule, add);if (!add)MessageBox(獲取函數(shù)地址失敗獲取函數(shù)地址失??!);return;CString str;str.Format(7 + 5 = %d, add(7,5);MessageBox(str);Fundamentals of Comp
25、uters制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1021顯式加載方式加載顯式加載方式加載DLL名字改編問(wèn)題名字改編問(wèn)題 上述程序運(yùn)行會(huì)談處消息框上述程序運(yùn)行會(huì)談處消息框“獲取函數(shù)地址失??!獲取函數(shù)地址失敗!”,原因如下:原因如下: C+編譯器在生成編譯器在生成DLL時(shí),會(huì)對(duì)導(dǎo)出的函數(shù)進(jìn)行時(shí),會(huì)對(duì)導(dǎo)出的函數(shù)進(jìn)行名字改名字改編編,并且不同的編譯器使用的改編規(guī)則不一樣,因此改編,并且不同的編譯器使用的改編規(guī)則不一樣,因此改編后的名字不一樣的。后的名字不一樣的。 因此,因此,GetProcAddress的第二個(gè)參數(shù)需要寫改編后的函的第二個(gè)參數(shù)需要寫
26、改編后的函數(shù)名。數(shù)名。 (改編后的函數(shù)名字可通過(guò)(改編后的函數(shù)名字可通過(guò)Depends工具查到)工具查到)FUNC add = (FUNC)GetProcAddress(hModule, ?addYAHHHZ);Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1022顯式加載方式加載顯式加載方式加載DLL名字改編問(wèn)題(續(xù))名字改編問(wèn)題(續(xù)) 如果希望動(dòng)態(tài)鏈接庫(kù)在編譯時(shí),導(dǎo)出函數(shù)的名稱不要發(fā)如果希望動(dòng)態(tài)鏈接庫(kù)在編譯時(shí),導(dǎo)出函數(shù)的名稱不要發(fā)生改變,在定義導(dǎo)出函數(shù)時(shí),需要加上限定符:生改變,在定義導(dǎo)出函數(shù)時(shí)
27、,需要加上限定符:extern Cextern C _declspec (dllexport) int add(int a, int b)return a + b;extern C _declspec (dllexport) int subtract(int a, int b)return a - b; extern “C”可以解決可以解決C+對(duì)對(duì)C語(yǔ)言之間的函數(shù)名改編問(wèn)題,但這語(yǔ)言之間的函數(shù)名改編問(wèn)題,但這種方法有一個(gè)缺陷,就是不能用于導(dǎo)出一個(gè)類的成員函數(shù),種方法有一個(gè)缺陷,就是不能用于導(dǎo)出一個(gè)類的成員函數(shù),只能只能用于導(dǎo)出全局函數(shù)這種情況用于導(dǎo)出全局函數(shù)這種情況。Fundamentals of Computers制作:劉曉翔JINAN University暨南大學(xué)珠海學(xué)院Windows編程2022-2-1023內(nèi)容安排內(nèi)容安排n Win32 Dll 的創(chuàng)建的創(chuàng)建n 顯式加載方式加載顯式加載方式加載Dlln DllMain函數(shù)函數(shù)n 動(dòng)態(tài)鏈接庫(kù)概述動(dòng)態(tài)鏈接庫(kù)概述n MFC Dlln 隱式鏈接方式加載隱式
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度博物館地板磚鋪設(shè)與文物保護(hù)合同3篇
- 2024年粵教滬科版九年級(jí)科學(xué)下冊(cè)階段測(cè)試試卷含答案
- 2024年浙科版選修3生物下冊(cè)月考試卷
- 醫(yī)療實(shí)踐中的實(shí)驗(yàn)教學(xué)策略探討
- 辦公新思維創(chuàng)意激發(fā)生產(chǎn)力
- 優(yōu)化學(xué)生餐廳布局提升整體舒適度
- 2025中國(guó)電子工程設(shè)計(jì)院限公司檢測(cè)事業(yè)部招聘32人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)動(dòng)物衛(wèi)生與流行病學(xué)中心公開(kāi)招聘9人(北京)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國(guó)中車下屬企業(yè)公開(kāi)招聘博士研究生200人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中交二航局校園招聘(昆明崗)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 馬克思主義與社會(huì)科學(xué)方法論概述(課件)
- 南京財(cái)經(jīng)大學(xué)國(guó)際服務(wù)貿(mào)易(考試重點(diǎn))
- 玻璃生產(chǎn)工藝及裝備培訓(xùn)
- 2024年國(guó)投信托有限公司招聘筆試參考題庫(kù)含答案解析
- 自身免疫性肝炎的護(hù)理查房
- 《卜算子-黃州定慧院寓居作》理解性默寫(含答案)
- 部編版語(yǔ)文五年級(jí)上冊(cè)第一單元大單元教學(xué)設(shè)計(jì)
- 肝膿腫健康宣教
- 少先隊(duì)大隊(duì)輔導(dǎo)員勝任力模型研究
- 人才隊(duì)伍建設(shè)實(shí)施方案
- 德欽縣云嶺鄉(xiāng)、佛山鄉(xiāng)部分村落生活垃圾處置工程環(huán)評(píng)報(bào)告
評(píng)論
0/150
提交評(píng)論