




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、如何從DLL中生成LIB文件如何從dll文件導(dǎo)岀對(duì)應(yīng)的lib文件?Visual C+ 開(kāi)發(fā)工具提供了兩個(gè)命令行工具, 一個(gè)是dumpbin.exe,另一個(gè)是lib.exe。利用這兩 個(gè)工具即可從dll導(dǎo)岀其對(duì)應(yīng)的lib。1、在命令行執(zhí)行:dumpb in /exports yourdll.dll > yourdll.def2、 編輯 yourdll.def文件,使之格式與.def文件格式一致。比如:EXPORTS;fn1;fn2;3、在命令行執(zhí)行:lib /def:yourdll.def/machi ne:i386/out:yourdll.lib為無(wú)LIB的DLL制作LIB函數(shù)符號(hào)輸入庫(kù)
2、本文介紹了在VC中針對(duì)無(wú)LIB時(shí)的DLL隱式鏈接,制作可供VC+使用的LIB函數(shù)符號(hào)輸入庫(kù)。具 體步驟如下:一、使用VC+的工具DUMPBIN將DLL中的導(dǎo)岀函數(shù)表導(dǎo)岀到一定義(.DEF)文件EXAMPLE :DUMPBIN VideoDeCoder.dll /EXPROTS /OUT:VideoDeCoder.def二、將導(dǎo)岀的.DEF文件整理為一符合.DEF個(gè)數(shù)的函數(shù)導(dǎo)岀文件EXAMPLE :VideoDeCoder.DEF文件內(nèi)容如下 Dump of file VideoDeCoder.dllFile Type: DLLSecti oncontains thefollowi ngexpo
3、rtsforVideoDeCoder.dll0characteristics3D49E48F timedate stampFriAug0209:46:5520020.00 version1 ordinal base11 n umber offun cti ons11n umber of n amesordi nal hint RVAn ame1000010F60_TM_ClearDecoderBuff42100010E80_TM_CloseDecoder43200010F00_TM_DecodePicture44300010ED0_TM_DecodePictureHeader45400010F
4、D0_TM_GetFileE nd46500011030_TM_GetUValue47600011060_TM_GetVValue48700011000_TM_GetYValue49800010E10_TM_Ope nDecoder810900010F30_TM_Retur nType411A00010F90_TM_SetFileE nd8Summary2000.data1000.rdata1000.reloc15000.text按照以下方法整理1)添加LIB說(shuō)明LIBRARY"VideoDeCoder"DESCRIPTION "VideoDeCoder libr
5、ary"2)去掉導(dǎo)岀函數(shù)說(shuō)明端以外的內(nèi)容,在LIB說(shuō)明下添加"VideoDeCoder""xx"為DLL名稱(chēng)"EXPROTS"說(shuō)明導(dǎo)岀函數(shù)LIBRARYDESCRIPTION"VideoDeCoder library"EXPORTSordinal hintRVAname1000010F60_TM_ClearDecoderBuff42100010E80_TM_CloseDecoder43200010F00_TM_DecodePicture4300010ED0_TM_DecodePictureH5400010
6、FD0_TM_GetFileE nd46500011030_TM_GetUValue47600011060_TM_GetVValue48700011000_TM_GetYValue49800010E10_TM_Ope nDecoder810900010F30_TM_ReturnType411A00010F90_TM_SetFileE nd83)將所有的函數(shù)放至行首去掉 "hint" 和 "RVA" 數(shù)據(jù),留下函數(shù)的序號(hào)"ordinal",在序號(hào)前加上"" 符號(hào) 形成"_導(dǎo)岀函數(shù)名參數(shù)字節(jié)和序號(hào)“此種格式(
7、_stdcall方式調(diào)用導(dǎo)岀的函數(shù)符號(hào)是"函數(shù)名稱(chēng)參數(shù)字節(jié)和").最后形成.DEF文件如下:LIBRARY"VideoDeCoder"DESCRIPTION "VideoDeCoder library"EXPORTSTM_ClearDecoderBuff4TM_CloseDecoder4TM_DecodePicture4TM_DecodePictureHeader4TM_GetFileE nd4TM_GetUValue4TM_GetVValue4TM_GetYValue4TM_Ope nDecoder8TM_ReturnType4TM
8、_SetFileE nd8三、使用VC+的LIB工具,帶/DEF:(.def文件名) 格式的的LIB文件了 .1234567891011/MACHINE:IX86(80X86 機(jī)器),就輸岀符合 VC+EXAMPLE:LIB /DEF:VideoDeCoder.def /MACHINE:IX86四、接時(shí)帶上LIB文件鏈接;注意的是當(dāng)有些動(dòng)態(tài)庫(kù) DUMPBIN的只有函數(shù)名,無(wú)"nn"的參數(shù)格式,如 C+Builder寫(xiě)的DLL,輸岀就只有 函數(shù)名符號(hào),鏈接時(shí)就會(huì)報(bào)錯(cuò):error LNK2002:unresolved externalsymbol"functionna
9、menn"提示程序中引入的函數(shù)符號(hào)無(wú)法識(shí)別,這時(shí)只要將DEF文件中相應(yīng)的函數(shù)名稱(chēng)改為functionnamenn方式,重新建立LIB,重新鏈接即可.def文件格式以下摘自MSDN,希望有幫助。不過(guò)在 VC下編程好像用不著自己定義 DEF文件:模塊定義(.def) 文件模塊定義(.def)文件為鏈接器提供有關(guān)被鏈接程序的導(dǎo)岀、屬性及其他方面的信息。生成DLL 時(shí),.def文件最有用。由于存在可代替模塊定義語(yǔ)句使用的鏈接器選項(xiàng),通常不需要.def文件。也可以將 _declspec(dllexport)用作指定導(dǎo)岀函數(shù)的手段。在鏈接器階段可以使用/DEF (指定模塊定義文件)鏈接器選項(xiàng)調(diào)用
10、.def 文件。如果生成的.exe 文件沒(méi)有導(dǎo)岀,使用.def文件將使輸岀文件較大并降低加載速度。模塊定義語(yǔ)句的規(guī)則下列語(yǔ)法規(guī)則適用于.def文件中的所有語(yǔ)句。其他適用于特定語(yǔ)句的規(guī)則與各語(yǔ)句一起加以說(shuō)明。語(yǔ)句、屬性關(guān)鍵字和用戶(hù)指定的標(biāo)識(shí)符區(qū)分大小寫(xiě)。包含空格或分號(hào)(;)的長(zhǎng)文件名必須用引號(hào)(“) 引起。使用一個(gè)或多個(gè)空格、制表符或換行符,將語(yǔ)句關(guān)鍵字同其參數(shù)分開(kāi)和將各語(yǔ)句分開(kāi)。指定參數(shù)的 冒號(hào)(:)或等號(hào)(=)兩旁有零個(gè)或多個(gè)空格、制表符或換行符。如果使用NAME 或 LIBRARY語(yǔ)句,則這些語(yǔ)句必須位于所有其他語(yǔ)句之前。在 .def 文件中,SECTIONS 和EXPORTS 語(yǔ)句可以岀
11、現(xiàn)多次。每個(gè)語(yǔ)句都可以采用多個(gè)規(guī)范,各規(guī)范間必須用一個(gè)或多個(gè)空格、制表符或換行符分開(kāi)。語(yǔ)句關(guān)鍵字必須在第一個(gè)規(guī)范的前 面岀現(xiàn)一次,并且可以在每個(gè)附加規(guī)范的前面重復(fù)。許多語(yǔ)句都具有等效的LINK命令行選項(xiàng)。有關(guān)其他詳細(xì)信息,請(qǐng)參閱相應(yīng)的LINK 選項(xiàng)說(shuō)明。.def 文件中的注釋由每個(gè)注釋行開(kāi)始處的分號(hào)(;)指定。注釋不能與語(yǔ)句共享一行,但可以在多行語(yǔ)句的規(guī)范間岀現(xiàn)。(SECTIONS 和 EXPORTS 為多行語(yǔ)句。)以十進(jìn)制或十六進(jìn)制為基礎(chǔ)指定數(shù)值參數(shù)。如果字符串參數(shù)與保留字匹配,則必須用雙引號(hào)(“) 將字符串參數(shù)引起。DESCRIPTION "text"該語(yǔ)句將字符串寫(xiě)入
12、 .rdata 節(jié)。將指定的text 用單引號(hào)或雙引號(hào)( 或 ”)引起。若要在字符串中使用引號(hào)(單引號(hào)或雙引號(hào)),請(qǐng)用其他類(lèi)型的標(biāo)記括住字符串。在模塊定義文件中,DESCRIPTION僅在生成虛擬設(shè)備驅(qū)動(dòng)程序(VxD)時(shí)有效。EXETYPE:d yn amic| dev386在模塊定義文件中,EXETYPE僅在生成虛擬設(shè)備驅(qū)動(dòng)程序(VxD)時(shí)有效。如果生成虛擬設(shè)備驅(qū)動(dòng)程序時(shí)在模塊定義文件中沒(méi)有指定EXETYPE,并且如果沒(méi)有指定/EXETYPE 鏈接器選項(xiàng),則靜態(tài)加載(dev386) 生效。EXPORTSdefi niti onsEXPORTS 語(yǔ)句引入了一個(gè)由一個(gè)或多個(gè)definitions
13、 (導(dǎo)岀的函數(shù)或數(shù)據(jù))組成的節(jié)。每個(gè)定義必須在單獨(dú)一行上。EXPORTS 關(guān)鍵字可以在第一個(gè)定義所在的同一行上或在前一行上。.def文件可以包含一個(gè)或多個(gè) EXPORTS 語(yǔ)句。導(dǎo)岀defi ni tio ns的語(yǔ)法為:entryn ame=i nter naln ameordi nal NONAME PRIVATE DATAentryn ame 是要導(dǎo)岀的函數(shù)名或變量名。這是必選項(xiàng)。如果導(dǎo)岀的名稱(chēng)與DLL 中的名稱(chēng)不同,則通過(guò)in ternal name 指定 DLL中導(dǎo)岀的名稱(chēng)。例如,如果DLL 導(dǎo)岀函數(shù)func1(),要將它用作func2(),則應(yīng)指定:EXPORTSfun c2=fu
14、nc1ordi nal允許指定是序號(hào)而不是函數(shù)名將進(jìn)入DLL的導(dǎo)岀表。這有助于最小化DLL的大小。 LIB文件將包含序號(hào)與函數(shù)之間的映射,這使您得以像通常在使用DLL的項(xiàng)目中那樣使用函數(shù)名??蛇x的 NONAME關(guān)鍵字允許只按序號(hào)導(dǎo)岀,并減小結(jié)果DLL中導(dǎo)岀表的大小。但是,如果要在DLL 上使用GetProcAddress,則必須知道序號(hào),因?yàn)槊Q(chēng)將無(wú)效。可選的 PRIVATE關(guān)鍵字禁止將entryn ame 放到由 LINK生成的導(dǎo)入庫(kù)中。它對(duì)同樣是由 LINK生成的圖像中的導(dǎo)岀無(wú)效??蛇x的 DATA 關(guān)鍵字指定導(dǎo)岀的是數(shù)據(jù),而不是代碼。例如,可以導(dǎo)岀數(shù)據(jù)變量,如下所示:EXPORTSi DA
15、TA當(dāng)對(duì)同一導(dǎo)岀使用PRIVATE 和 DATA 時(shí),PRIVATE 必須位于DATA的前面。有三種導(dǎo)岀定義的方法,按照建議的使用順序依次為:源代碼中的_declspec(dllexport)關(guān)鍵字.def 文件中的EXPORTS 語(yǔ)句LINK命令中的/EXPORT 規(guī)范所有這三種方法可以用在同一個(gè)程序中。LINK在生成包含導(dǎo)岀的程序時(shí)還創(chuàng)建導(dǎo)入庫(kù),除非生成中使用了.exp 文件。以下是 EXPORTS節(jié)的示例:EXPORTSDllCa nUn loadNowDllWi ndowName = NameDllGetClassObject4DllRegisterServer7Dll Un regi
16、sterServer注意,使用 .def 文件從 DLL.declspec(dllexport)。但是,在任何使用 declspec(dllimport)。1PRIVATEDATADATANONAMEPRIVATE中導(dǎo)岀變量時(shí),不需要在變量上指定DLL的文件中,仍必須在數(shù)據(jù)聲明上使用LIBRARY libraryBASE=address該語(yǔ)句通知LINK 創(chuàng)建 DLL oLINK同時(shí)還創(chuàng)建導(dǎo)入庫(kù),除非生成中使用了.exp 文library 參數(shù)指定 DLL的名稱(chēng)。也可以使用/out 鏈接器選項(xiàng)指定 DLL輸岀名。BASE=address 參數(shù)設(shè)置操作系統(tǒng)用來(lái)加載DLL 的基址。該參數(shù)重寫(xiě) 0x
17、10000000 的默認(rèn) DLL位置。有關(guān)基址的詳細(xì)信息,請(qǐng)參閱 /BASE選項(xiàng)說(shuō)明。請(qǐng)記住,在生成DLL 時(shí)使用 /DLL鏈接器選項(xiàng)。/HEAP:reserve,commitHEAPSIZE所展示的功能與/HEAP鏈接器選項(xiàng)相同。NAMEapplicatio n BASE=address鏈接器選項(xiàng),而另/OUT 重寫(xiě)該語(yǔ)句指定主輸岀文件的名稱(chēng)。另一種指定輸岀文件名的方法是使用/out一種設(shè)置基址的方法是使用/BASE 鏈接器選項(xiàng)。如果兩種方法都指定了,則NAME。如果生成DLL,NAME將只影響DLL 名SECTIONS defi niti onsSECTIONS 語(yǔ)句引入了一個(gè)由一個(gè)或多個(gè)
18、definitions (關(guān)于項(xiàng)目輸岀文件各節(jié)的訪問(wèn)說(shuō)明符)組成的節(jié)。每個(gè)定義必須在單獨(dú)一行上。 SECTIONS 關(guān)鍵字可以在第一個(gè)定義所在的同一行或前 一行上。.def 文件可以包含一個(gè)或多個(gè) SECTIONS 語(yǔ)句。該 SECTIONS 語(yǔ)句為圖像文件中的一節(jié)或多節(jié)設(shè)置屬性,并可用于重寫(xiě)每種節(jié)類(lèi)型的默認(rèn)屬 性。defi ni tio ns的格式為:.sectio n_n ame specifier此處,. 為程序圖像中的節(jié)名,specifier為下列一個(gè)或多個(gè)訪問(wèn)修飾符:EXECUTEREADSHAREDWRITE用空格分開(kāi)修飾符名。例如:SECTIONS.rdata READ WRITESECTIONS 標(biāo)記 defi ni tio ns 節(jié)列表的開(kāi)始位置。每個(gè)定義必須在單獨(dú)一行上。 SECTIONS 關(guān)鍵字可以在第一個(gè)定義所在的同一行或前一行上。.def 文件可以包含一個(gè)或多個(gè) SECTIONS語(yǔ)句。支持 SEGMENTS 關(guān)鍵字作為 SECTIONS 的同義詞。Visual C+的早期版本支持:secti onCLASS'class name' specifier岀
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 尼爾斯騎鵝旅行記的讀后感15篇
- 外科內(nèi)鏡手術(shù)技術(shù)應(yīng)用及優(yōu)勢(shì)分析
- 山東濟(jì)南圖書(shū)館招聘試題帶答案分析2024年
- 壓力容器應(yīng)急預(yù)案8篇
- 廣東汕頭圖書(shū)館招聘試題帶答案分析2024年
- 機(jī)修班長(zhǎng)崗位說(shuō)明書(shū)
- 安全師考試試題及答案
- 孫正義的頭腦讀書(shū)筆記7篇
- 人教版二年級(jí)數(shù)學(xué)上冊(cè)全冊(cè)教案(秋季新版人教版教材)
- 2024-2025學(xué)年度“安全生產(chǎn)事故隱患排查”知識(shí)競(jìng)賽高分題庫(kù)附參考答案詳解
- 中國(guó)古代文學(xué)史(全套)課件
- 普通高考考生戶(hù)籍情況審查登記表
- 暴力恐怖襲擊事件
- 金屬纏繞墊(1002)要點(diǎn)課件
- 局限期小細(xì)胞肺癌放療進(jìn)展課件
- 教師情緒和壓力疏導(dǎo)課件
- 駐足思考201305講解
- 打印機(jī)租賃項(xiàng)目實(shí)施方案
- 法律顧問(wèn)服務(wù)公開(kāi)招標(biāo)評(píng)分表
- 聚氨酯發(fā)泡膠MSDS
- 2022年《國(guó)際貿(mào)易地理》課程教案
評(píng)論
0/150
提交評(píng)論