c++中dll函數(shù)的導(dǎo)出和導(dǎo)入

ID:16727513

大?。?6.00 KB

頁(yè)數(shù):8頁(yè)

時(shí)間:2018-08-24

c++中dll函數(shù)的導(dǎo)出和導(dǎo)入_第1頁(yè)
c++中dll函數(shù)的導(dǎo)出和導(dǎo)入_第2頁(yè)
c++中dll函數(shù)的導(dǎo)出和導(dǎo)入_第3頁(yè)
c++中dll函數(shù)的導(dǎo)出和導(dǎo)入_第4頁(yè)
c++中dll函數(shù)的導(dǎo)出和導(dǎo)入_第5頁(yè)
資源描述:

《c++中dll函數(shù)的導(dǎo)出和導(dǎo)入》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、1.使用DEF文件從DLL導(dǎo)出模塊定義(.def)文件是包含一個(gè)或多個(gè)描述DLL各種屬性的Module語(yǔ)句的文本文件。如果不使用__declspec(dllexport)關(guān)鍵字導(dǎo)出DLL的函數(shù),則DLL需要.def文件。.def文件必須至少包含下列模塊定義語(yǔ)句:文件中的第一個(gè)語(yǔ)句必須是LIBRARY語(yǔ)句。此語(yǔ)句將.def文件標(biāo)識(shí)為屬于DLL。LIBRARY語(yǔ)句的后面是DLL的名稱(chēng)。鏈接器將此名稱(chēng)放到DLL的導(dǎo)入庫(kù)中。EXPORTS語(yǔ)句列出名稱(chēng),可能的話還會(huì)列出DLL導(dǎo)出函數(shù)的序號(hào)值。通過(guò)在函數(shù)名的后面加上@符和一個(gè)數(shù)字,給函數(shù)分配序號(hào)值。當(dāng)指定序號(hào)值時(shí),序號(hào)值的

2、范圍必須是從1到N,其中N是DLL導(dǎo)出函數(shù)的個(gè)數(shù)。如果希望按序號(hào)導(dǎo)出函數(shù),請(qǐng)參見(jiàn)按序號(hào)而不是按名稱(chēng)從DLL導(dǎo)出函數(shù)以及本主題。例如,包含實(shí)現(xiàn)二進(jìn)制搜索樹(shù)的代碼的DLL看上去可能像下面這樣:LIBRARYBTREEEXPORTSInsert@1Delete@2Member@3Min@4如果使用MFCDLL向?qū)?chuàng)建MFCDLL,則向?qū)槟鷦?chuàng)建主干.def文件并將其自動(dòng)添加到項(xiàng)目中。添加要導(dǎo)出到此文件的函數(shù)名。對(duì)于非MFCDLL,必須親自創(chuàng)建.def文件并將其添加到項(xiàng)目中。如果導(dǎo)出C++文件中的函數(shù),必須將修飾名放到.def文件中,或者通過(guò)使用外部“C”定義具有標(biāo)準(zhǔn)

3、C鏈接的導(dǎo)出函數(shù)。如果需要將修飾名放到.defforthequalityofreviewsandreview.Article26threview(a)theCCRAcompliance,whethercopiesofchecks;(B)whetherdoubleinvestigation;(C)submissionofprogramcompliance,investigationorexaminationofwhetherviewsareclear;(D)theborrower,guarantorloans文件中,則可以通過(guò)使用DUMPBIN工具或/MAP鏈接器

4、選項(xiàng)來(lái)獲取修飾名。請(qǐng)注意,編譯器產(chǎn)生的修飾名是編譯器特定的。如果將VisualC++編譯器產(chǎn)生的修飾名放到.def文件中,則鏈接到DLL的應(yīng)用程序必須也是用相同版本的VisualC++生成的,這樣調(diào)用應(yīng)用程序中的修飾名才能與DLL的.def文件中的導(dǎo)出名相匹配。如果生成擴(kuò)展DLL并使用.def文件導(dǎo)出,則將下列代碼放在包含導(dǎo)出類(lèi)的頭文件的開(kāi)頭和結(jié)尾:#undefAFX_DATA#defineAFX_DATAAFX_EXT_DATA//#undefAFX_DATA#defineAFX_DATA這些代碼行確保內(nèi)部使用的MF

5、C變量或添加到類(lèi)的變量是從擴(kuò)展DLL導(dǎo)出(或?qū)耄┑摹@?,?dāng)使用DECLARE_DYNAMIC派生類(lèi)時(shí),該宏擴(kuò)展以將CRuntimeClass成員變量添加到類(lèi)。省去這四行代碼可能會(huì)導(dǎo)致不能正確編譯或鏈接DLL,或在客戶端應(yīng)用程序鏈接到DLL時(shí)導(dǎo)致錯(cuò)誤。當(dāng)生成DLL時(shí),鏈接器使用.def文件創(chuàng)建導(dǎo)出(.exp)文件和導(dǎo)入庫(kù)(.lib)文件。然后,鏈接器使用導(dǎo)出文件生成DLL文件。隱式鏈接到DLL的可執(zhí)行文件在生成時(shí)鏈接到導(dǎo)入庫(kù)。請(qǐng)注意,MFC本身使用.def文件從MFCx0.dll導(dǎo)出函數(shù)和類(lèi)。1.使用_declspec(dllexport)從DLL導(dǎo)出Micr

6、osoft在VisualC++的16位編譯器版本中引入了_export,使編譯器得以自動(dòng)生成導(dǎo)出名并將它們放到一個(gè).lib文件中。然后,此.lib文件就可以像靜態(tài).lib那樣用于與DLL鏈接。forthequalityofreviewsandreview.Article26threview(a)theCCRAcompliance,whethercopiesofchecks;(B)whetherdoubleinvestigation;(C)submissionofprogramcompliance,investigationorexaminationofwheth

7、erviewsareclear;(D)theborrower,guarantorloans在更新的編譯器版本中,可以使用_declspec(dllexport)關(guān)鍵字從DLL導(dǎo)出數(shù)據(jù)、函數(shù)、類(lèi)或類(lèi)成員函數(shù)。_declspec(dllexport)會(huì)將導(dǎo)出指令添加到對(duì)象文件中,因此您不需要使用.def文件。當(dāng)試圖導(dǎo)出C++修飾函數(shù)名時(shí),這種便利最明顯。由于對(duì)名稱(chēng)修飾沒(méi)有標(biāo)準(zhǔn)規(guī)范,因此導(dǎo)出函數(shù)的名稱(chēng)在不同的編譯器版本中可能有所變化。如果使用_declspec(dllexport),僅當(dāng)解決任何命名約定更改時(shí)才必須重新編譯DLL和依賴(lài).exe文件。許多導(dǎo)出指令(如序號(hào)

8、、NONAME和PRIV

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。
关闭