青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨感而發(fā)

雜七雜八

統(tǒng)計

留言簿(13)

閱讀排行榜

評論排行榜

【轉(zhuǎn)】庫文件靜態(tài)連接時所需的def文件格式解析

轉(zhuǎn)自:http://blog.chinaunix.net/u1/51538/showart_573215.html

模塊定義   (.def)   文件  
   
  模塊定義   (.def)   文件為鏈接器提供有關被鏈接程序的導出、屬性及其他方面的

信息。生成   DLL   時,.def   文件最有用。由于存在可代替模塊定義語句使用的鏈接器選項,通常不需要   .def   文件。也可以將__declspec(dllexport)   用作指定導出函數(shù)的手段。  
   
  在鏈接器階段可以使用   /DEF(指定模塊定義文件)鏈接器選項調(diào)用   .def   文件。  
   
  如果生成的   .exe   文件沒有導出,使用   .def   文件將使輸出文件較大并降低加載速度。  
   
  模塊定義語句的規(guī)則  
   
  下列語法規(guī)則適用于   .def   文件中的所有語句。其他適用于特定語句的規(guī)則與各語句一起加以說明。    
   
  語句、屬性關鍵字和用戶指定的標識符區(qū)分大小寫。    
  包含空格或分號   (;)   的長文件名必須用引號   (")   引起。    
  使用一個或多個空格、制表符或換行符,將語句關鍵字同其參數(shù)分開和將各語句分開。指定參數(shù)的冒號   (:)   或等號   (=)   兩旁有零個或多個空格、制表符或換行符。    
  如果使用   NAME   或   LIBRARY   語句,則這些語句必須位于所有其他語句之前。    
  在   .def   文件中,SECTIONS   和   EXPORTS   語句可以出現(xiàn)多次。每個語句都可以采用多個規(guī)范,各規(guī)范間必須用一個或多個空格、制表符或換行符分開。語句關鍵字必須在第一個規(guī)范的前面出現(xiàn)一次,并且可 以在每個附加規(guī)范的前面重復。    
  許多語句都具有等效的   LINK   命令行選項。有關其他詳細信息,請參閱相應的   LINK   選項說明。    
  .def   文件中的注釋由每個注釋行開始處的分號   (;)   指定。注釋不能與語句共享一行,但可以在多行語句的規(guī)范間出現(xiàn)。(SECTIONS   和   EXPORTS   為多行語句。)    
  以十進制或十六進制為基礎指定數(shù)值參數(shù)。    
  如果字符串參數(shù)與保留字匹配,則必須用雙引號   (")   將字符串參數(shù)引起。  
   
  DESCRIPTION   "text"  
   
  該語句將字符串寫入   .rdata   節(jié)。將指定的   text   用單引號或雙引號('   或   ")引起。若要在字符串中使用引號(單引號或雙引號),請用其他類型的標記括住字符串。  
   
  在模塊定義文件中,DESCRIPTION   僅在生成虛擬設備驅(qū)動程序   (VxD)   時有效。  
   
  EXETYPE:dynamic   |   dev386  
   
  在模塊定義文件中,EXETYPE   僅在生成虛擬設備驅(qū)動程序   (VxD)   時有效。如果生成虛擬設備驅(qū)動程序時在模塊定義文件中沒有指定   EXETYPE,并且如果沒有指定   /EXETYPE   鏈接器選項,則靜態(tài)加載   (dev386)   生效。  
   
  EXPORTS  
  definitions  
   
  EXPORTS   語句引入了一個由一個或多個   definitions(導出的函數(shù)或數(shù)據(jù))組成的節(jié)。每個定義必須在單獨一行上。EXPORTS   關鍵字可以在第一個定義所在的同一行上或在前一行上。.def   文件可以包含一個或多個   EXPORTS   語句。  
   
  導出   definitions   的語法為:  
   
  entryname[=internalname]   [@ordinal   [NONAME]]   [PRIVATE]   [DATA]  
  entryname   是要導出的函數(shù)名或變量名。這是必選項。如果導出的名稱與   DLL   中的名稱不同,則通過   internalname   指定   DLL   中導出的名稱。例如,如果   DLL   導出函數(shù)   func1(),要將它用作   func2(),則應指定:  
   
  EXPORTS  
  func2=func1  
  @ordinal   允許指定是序號而不是函數(shù)名將進入   DLL   的導出表。這有助于最小化   DLL   的大小。.LIB   文件將包含序號與函數(shù)之間的映射,這使您得以像通常在使用   DLL   的項目中那樣使用函數(shù)名。  
   
  可選的   NONAME   關鍵字允許只按序號導出,并減小結果   DLL   中導出表的大小。但是,如果要在   DLL   上使用   GetProcAddress,則必須知道序號,因為名稱將無效。  
   
  可選的   PRIVATE   關鍵字禁止將   entryname   放到由   LINK   生成的導入庫中。它對同樣是由   LINK   生成的圖像中的導出無效。  
   
  可選的   DATA   關鍵字指定導出的是數(shù)據(jù),而不是代碼。例如,可以導出數(shù)據(jù)變量,如下所示:  
   
  EXPORTS  
  i   DATA  
  當對同一導出使用   PRIVATE   和   DATA   時,PRIVATE   必須位于   DATA   的前面。  
   
  有三種導出定義的方法,按照建議的使用順序依次為:    
   
  源代碼中的   __declspec(dllexport)   關鍵字    
  .def   文件中的   EXPORTS   語句    
  LINK   命令中的   /EXPORT   規(guī)范    
  所有這三種方法可以用在同一個程序中。LINK   在生成包含導出的程序時還創(chuàng)建導入庫,除非生成中使用了   .exp   文件。  
   
  以下是   EXPORTS   節(jié)的示例:  
   
  EXPORTS  
        DllCanUnloadNow             @1           PRIVATE       DATA  
        DllWindowName   =   Name                 DATA  
        DllGetClassObject         @4   NONAME       PRIVATE  
        DllRegisterServer         @7  
        DllUnregisterServer  
  注意,使用   .def   文件從   DLL   中導出變量時,不需要在變量上指定   __declspec(dllexport)。但是,在任何使用   DLL   的文件中,仍必須在數(shù)據(jù)聲明上使用   __declspec(dllimport)。  
   
  LIBRARY   [library][BASE=address]  
   
  該語句通知   LINK   創(chuàng)建   DLL。LINK   同時還創(chuàng)建導入庫,除非生成中使用了   .exp   文件。  
   
  library   參數(shù)指定   DLL   的名稱。也可以使用   /out   鏈接器選項指定   DLL   輸出名。  
   
  BASE=address   參數(shù)設置操作系統(tǒng)用來加載   DLL   的基址。該參數(shù)重寫   0x10000000   的默認   DLL   位置。有關基址的詳細信息,請參閱   /BASE   選項說明。    
   
  請記住,在生成   DLL   時使用   /DLL   鏈接器選項。  
   
  /HEAP:reserve[,commit]  
   
  HEAPSIZE   所展示的功能與   /HEAP   鏈接器選項相同。  
   
  NAME   [application][BASE=address]  
   
  該語句指定主輸出文件的名稱。另一種指定輸出文件名的方法是使用   /out   鏈接器選項,而另一種設置基址的方法是使用   /BASE   鏈接器選項。如果兩種方法都指定了,則   /OUT   重寫   NAME。    
   
  如果生成   DLL,NAME   將只影響   DLL   名。  
   
  SECTIONS  
  definitions  
   
  SECTIONS   語句引入了一個由一個或多個   definitions(關于項目輸出文件各節(jié)的訪問說明符)組成的節(jié)。每個定義必須在單獨一行上。SECTIONS   關鍵字可以在第一個定義所在的同一行或前一行上。.def   文件可以包含一個或多個   SECTIONS   語句。  
   
  該   SECTIONS   語句為圖像文件中的一節(jié)或多節(jié)設置屬性,并可用于重寫每種節(jié)類型的默認屬性。  
   
  definitions   的格式為:  
   
  .section_name   specifier  
   
  此處,.section_name   為程序圖像中的節(jié)名,specifier   為下列一個或多個訪問修飾符:    
   
  EXECUTE    
  READ    
  SHARED    
  WRITE    
  用空格分開修飾符名。例如:  
   
  SECTIONS  
  .rdata   READ   WRITE  
  SECTIONS   標記   definitions   節(jié)列表的開始位置。每個定義必須在單獨一行上。SECTIONS   關鍵字可以在第一個定義所在的同一行或前一行上。.def   文件可以包含一個或多個   SECTIONS   語句。支持   SEGMENTS   關鍵字作為   SECTIONS   的同義詞。  
   
  Visual   C++   的早期版本支持:  
   
  section   [CLASS   'classname']   specifier  
  出于兼容性考慮,支持   CLASS   關鍵字,但忽略了它。  
   
  另一種指定節(jié)屬性的方法是使用   /SECTION   選項。  
   
  STACKSIZE   reserve[,commit]  
   
  該語句設置堆棧的大小(以字節(jié)為單位)。另一種設置堆棧的方法是使用堆棧分配   (/STACK)   選項。有關   reserve   和   commit   參數(shù)的詳細信息,請參閱關于該選項的文檔。    
   
  該選項對   DLL   無效。  
   
  STUB:filename  
   
  當用于生成虛擬設備驅(qū)動程序   (VxD)   的模塊定義文件時,STUB   允許指定包含將在   VxD   中使用的   IMAGE_DOS_HEADER   結構(在   WINNT.H   中定義)而不是默認頭的文件名。  
   
  另一種指定   filename   的方法是使用   /STUB   鏈接器選項。  
   
  在模塊定義文件中,STUB   僅在生成虛擬設備驅(qū)動程序   (VxD)   時有效。  
   
  VERSION   major[.minor]  
   
  該語句通知   LINK   將一個數(shù)字放到   .exe   文件或   DLL   的頭中。major   和   minor   參數(shù)是從   0   到   65,535   的范圍內(nèi)的十進制數(shù)。默認值為   0.0   版。  
   
  另一種指定版本號的方法是使用版本信息   (/VERSION)   選項。    
   
  VXD   filename  
   
  允許指定虛擬設備驅(qū)動程序   (VxD)   的名稱。默認情況下,VxD   獲取與第一個對象文件相同的名稱。  
   
  另一種指定虛擬設備驅(qū)動程序版本的方法是使用   /VXD   鏈接器選項,另一種命名輸出文件的方法是使用   /out   選項。  
   
  在模塊定義文件中,VXD   僅在生成虛擬設備驅(qū)動程序   (VxD)   時有效。

二.MSDN中的名詞解釋
模塊定義 (.def) 文件為鏈接器提供有關被鏈接程序的導出、屬性及其他方面的信息。生成 DLL 時,.def 文件最有用。由于存在可代替模塊定義語句使用的鏈接器選項,通常不需要 .def 文件。也可以將 __declspec(dllexport) 用作指定導出函數(shù)的手段。在鏈接器階段可以使用 /DEF(指定模塊定義文件)鏈接器選項調(diào)用 .def 文件。
如果生成的 .exe 文件沒有導出,使用 .def 文件將使輸出文件較大并降低加載速度。
通俗解釋:
在VC ++中,生成DLL可以不使用.def文件。只需要在VC++的函數(shù)定義前要加__declspec(dllexport)修飾就可以了。但是使用 __declspec(dllexport)和使用.def文件是有區(qū)別的。如果DLL是提供給VC++用戶使用的,你只需要把編譯DLL時產(chǎn)生的. lib提供給用戶,它可以很輕松地調(diào)用你的DLL。但是如果你的DLL是供其他程序如VB、delphi,以及.NET
用戶使用的,那么會產(chǎn)生一個小麻煩。因為VC++對于__declspec(dllexport)聲明的函數(shù)會進行名稱轉(zhuǎn)換,如下面的函數(shù):
    __declspec(dllexport) int __stdcall IsWinNT()
    會轉(zhuǎn)換為IsWinNT@0,這樣你在VB中必須這樣聲明:
    Declare Function IsWinNT Lib "my.dll" Alias "IsWinNT@0" () As Long
    @的后面的數(shù)由于參數(shù)類型不同而可能不同。這顯然不太方便。所以如果要想避免這種轉(zhuǎn)換,就要使用.def文件方式。
    EXPORTS后面的數(shù)可以不給,系統(tǒng)會自動分配一個數(shù)。對于VB、PB、Delphi用戶,通常使用按名稱進行調(diào)用的方式,這個數(shù)關系不大,但是對于使用.lib鏈接的VC程序來說,不是按名稱進行調(diào)用,而是按照這個數(shù)進行調(diào)用的,所以最好給出。
例子:我們用VC6.0制作一個dll,不使用.def文件,在頭文件中這樣寫

#ifndef LIB_H
#define LIB_H
extern "C" int _declspec(dllexport)add(int x,int y);

#endif
如果是.def文件,可以這樣
LIBRARY      "xxx_dll"

EXPORTS
add  PRIVAT

 原文地址 http://wanderwarriorhsiao.blog.hexun.com/13081159_d.html

posted on 2009-04-09 09:17 shongbee2 閱讀(1068) 評論(0)  編輯 收藏 引用 所屬分類: COM相關

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲激情网址| 欧美电影免费观看高清完整版| 亚洲国产精品久久人人爱蜜臀| 久久精品国语| 亚洲国产精品嫩草影院| 欧美激情视频一区二区三区在线播放 | 麻豆成人av| 麻豆av一区二区三区| 91久久综合| 亚洲精品久久7777| 国产精品高潮视频| 久久久久99精品国产片| 免费黄网站欧美| 亚洲免费视频成人| 久久精品av麻豆的观看方式| 亚洲国产精品成人一区二区 | 午夜精品国产| 久久精品国产99| 亚洲狼人综合| 亚洲人体偷拍| 亚洲一区二区三区中文字幕在线| 国产一区视频观看| 亚洲品质自拍| 国产日韩欧美自拍| 亚洲风情亚aⅴ在线发布| 国产精品成人观看视频国产奇米| 久久人人97超碰精品888| 欧美激情 亚洲a∨综合| 欧美一区二区三区久久精品茉莉花 | 欧美福利在线| 国产精品久久久久久亚洲毛片| 国产伦理精品不卡| 亚洲国产精品成人| 国产丝袜一区二区| 日韩一区二区精品| 亚洲第一主播视频| 午夜在线视频观看日韩17c| 亚洲免费电影在线观看| 久久精品中文字幕一区二区三区| 中国亚洲黄色| 免费成人毛片| 久久午夜国产精品| 国产精品中文在线| 99视频超级精品| 亚洲国产成人不卡| 久久国产乱子精品免费女| 中文在线不卡视频| 欧美精品二区| 亚洲电影在线播放| 在线日本高清免费不卡| 亚洲欧美第一页| 亚洲女人天堂av| 欧美日韩国产精品专区 | 日韩一区二区精品| 老司机久久99久久精品播放免费| 久久久久久尹人网香蕉| 国产精品女人久久久久久| 99在线热播精品免费| 亚洲毛片在线观看| 欧美成人蜜桃| 亚洲高清视频一区| 亚洲高清久久久| 麻豆国产精品777777在线| 久久亚洲综合色| 国产婷婷97碰碰久久人人蜜臀| 亚洲午夜激情网站| 欧美亚洲视频在线看网址| 国产精品综合色区在线观看| 亚洲一区二区三区777| 香蕉久久精品日日躁夜夜躁| 欧美视频免费在线观看| 在线亚洲免费视频| 午夜宅男欧美| 国产在线精品自拍| 久久综合给合| 亚洲成人在线网站| 一区二区三区导航| 国产精品久久久久久超碰| 亚洲免费在线观看视频| 久久久人成影片一区二区三区观看| 最新国产成人av网站网址麻豆| 亚洲免费观看| 国产精品v欧美精品∨日韩| 亚洲午夜免费视频| 久久久美女艺术照精彩视频福利播放 | 国产伦精品一区二区三区免费| 篠田优中文在线播放第一区| 久久久免费精品视频| 在线免费观看日本欧美| 欧美日本乱大交xxxxx| 亚洲一区二区三区视频播放| 久久精品亚洲| 亚洲欧洲在线视频| 国产精品国产精品| 久久精品国产久精国产一老狼| 欧美成人午夜激情在线| 欧美无砖砖区免费| 久久综合久久久| 亚洲人精品午夜| 午夜一级久久| 亚洲黄色在线看| 国产精品毛片大码女人| 久久久噜噜噜久噜久久 | 欧美 日韩 国产一区二区在线视频| 91久久综合亚洲鲁鲁五月天| 国产精品成人v| 美女久久一区| 先锋资源久久| 亚洲毛片av| 免播放器亚洲一区| 亚洲欧美日韩天堂| 亚洲精品日产精品乱码不卡| 国产精品亚洲综合| 欧美日韩国产不卡| 久久天堂国产精品| 亚洲欧美日韩区| 亚洲精品一品区二品区三品区| 久久久欧美一区二区| 亚洲午夜羞羞片| 亚洲区国产区| 激情综合网址| 国产一区二区你懂的| 欧美色区777第一页| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲私拍自拍| a91a精品视频在线观看| 亚洲国产高清aⅴ视频| 久久久999精品视频| 午夜日本精品| 亚洲欧美日韩国产中文| 夜夜嗨av一区二区三区四区| 亚洲黄页一区| 亚洲国产欧美日韩精品| 狠久久av成人天堂| 国产午夜精品理论片a级大结局 | 欧美国产日韩视频| 麻豆精品视频在线| 裸体素人女欧美日韩| 久久五月婷婷丁香社区| 久久久综合网| 美女脱光内衣内裤视频久久影院 | 在线观看视频一区二区| 国产小视频国产精品| 国产视频一区二区在线观看| 国产日产高清欧美一区二区三区| 国产精品福利网| 国产美女诱惑一区二区| 国产久一道中文一区| 国产亚洲激情在线| 韩日成人av| 亚洲国产一区二区三区在线播| 亚洲电影视频在线| 亚洲精品小视频| 一本色道久久综合亚洲精品不| 在线亚洲欧美| 性做久久久久久| 久久免费视频观看| 亚洲第一狼人社区| 夜夜精品视频| 午夜精品免费在线| 久久久99精品免费观看不卡| 久久综合婷婷| 欧美日韩国产一区二区三区| 欧美性生交xxxxx久久久| 国产精品系列在线播放| 黄色一区三区| 99天天综合性| 欧美一区观看| 欧美高清视频一区二区| av成人老司机| 欧美高清在线一区二区| 亚洲日本欧美天堂| 亚洲综合清纯丝袜自拍| 久久九九精品| 欧美日韩中文字幕在线| 国产亚洲精品aa午夜观看| 亚洲激情视频网| 午夜视黄欧洲亚洲| 欧美成人高清| 亚洲制服av| 欧美激情区在线播放| 国产亚洲综合精品| 日韩一区二区免费高清| 久久久91精品国产一区二区三区 | 久久综合伊人| 国产精品高清网站| 91久久久久| 久久xxxx精品视频| 亚洲免费黄色| 久久在线精品| 国产精品蜜臀在线观看| 亚洲茄子视频| 久久在线视频| 一区二区三区回区在观看免费视频| 久久精品av麻豆的观看方式| 国产精品wwwwww| 99热这里只有成人精品国产| 久久久久久久久久久久久9999 | 欧美高清在线视频| 欧美综合二区|