国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
VS中def文件對(duì)于生成dll和lib文件的作用

 VS中def文件對(duì)于生成dll和lib文件的作用收藏

VS2005使用DEF文件來(lái)生成DLL與Lib

VS2005使用DEF文件來(lái)生成DLL與Lib時(shí),與VC6的設(shè)置是不一樣的,VC6工程中,只要有DEF文件并將其添加到工程中,VC6就可以自動(dòng)地生成DLL與其相應(yīng)的Lib文件了。

但是VS2005不一樣,需要指定DEF文件,方法如下:

例如:

把sqlite3.def 添加到工程中.

選擇工程 > 屬性中的鏈接器,然后找到"輸入"這一項(xiàng). 在 "模塊定義文件" 中輸入  sqlite3.def

注意: 你需要在 Debug 和 Release 中都輸入該項(xiàng)才行.

__declspec(dllexport) 和*.def文件的比較
文章出處:DIY部落(http://www.diybl.com/course/3_program/c++/cppxl/2008105/147591.html)

一、__declspec(dllexport)
在 32 位編譯器版本中,可以使用 __declspec(dllexport) 關(guān)鍵字從DLL 導(dǎo)出數(shù)據(jù)、函數(shù)、類或類成員函數(shù)。__declspec(dllexport) 在link時(shí)會(huì)將導(dǎo)出指令添加到obj文件中,因此不需要使用.def 文件。當(dāng)然,即使用了__declspec(dllexport)依然可以使用*.def文件,因?yàn)椴煌幾g器對(duì)于類的成員函數(shù)的namemangling規(guī)則不同,可以定義.def文件通過(guò)序號(hào)調(diào)用。為每個(gè)dll寫def顯得很繁雜,目前def使用已經(jīng)比較少了,更多的是使用__declspec(dllexport)在源代碼中定義dll的輸出函數(shù)。

若要輸出類的所有成員:數(shù)據(jù)or函數(shù),__declspec(dllexport)要放在類名左邊聲明:
class__declspec(dllexport) Class1{}
如果類沒(méi)有數(shù)據(jù)成員,__declspec(dllexport)放在class關(guān)鍵字前聲明就會(huì)被編譯器忽略,就沒(méi)有l(wèi)ib生成,如下:
__declspec(dllexport) class Class1{}


使用 __declspec(dllexport) 的優(yōu)缺點(diǎn)(zz)
使用 __declspec(dllexport)非常方便,因?yàn)椴槐乜紤]維護(hù) .def 文件和獲取導(dǎo)出函數(shù)的修飾名。例如,如果您設(shè)計(jì)的 DLL供自己控制的應(yīng)用程序使用,則此方法很適用。如果通過(guò)新的導(dǎo)出函數(shù)重新生成DLL,還必須重新生成應(yīng)用程序,因?yàn)槿绻褂貌煌姹镜木幾g器進(jìn)行重新編譯,則導(dǎo)出的 C++ 函數(shù)的修飾名可能會(huì)發(fā)生變化。

二、def文件
其實(shí)def文件的功能相當(dāng)于extern “C” __declspec(dllexport)

def文件中PRIVTATE的作用

The optional keyword PRIVATE prevents entryname from being placed inthe import library generated by LINK. It has no
effect on the exportin the image also generated byLINK.用了PRIVATE,生成的lib里沒(méi)有對(duì)應(yīng)方法或者數(shù)據(jù)的entryname因此不能被客戶隱式調(diào)用。

使用 .DEF 文件的優(yōu)缺點(diǎn)(zz)
在 .def 文件中導(dǎo)出函數(shù)使您得以控制導(dǎo)出序號(hào)。當(dāng)將附加的導(dǎo)出函數(shù)添加到 DLL時(shí),可以給它們分配更高的序號(hào)值(高于任何其他導(dǎo)出函數(shù))。當(dāng)您進(jìn)行此操作時(shí),使用隱式鏈接的應(yīng)用程序不必與包含新函數(shù)的新導(dǎo)入庫(kù)重新鏈接。這非常重要,例如,在設(shè)計(jì)將由許多應(yīng)用程序使用的第三方DLL 時(shí)??梢酝ㄟ^(guò)添加附加功能不斷地增強(qiáng) DLL,同時(shí)確?,F(xiàn)有應(yīng)用程序繼續(xù)正常使用新的 DLL。MFCDLL 是使用 .def 文件生成的。

使用 .def 文件的另一個(gè)優(yōu)點(diǎn)是:可以使用 NONAME 屬性導(dǎo)出函數(shù),該屬性僅將序號(hào)放到 DLL 的導(dǎo)出表中。對(duì)具有大量導(dǎo)出函數(shù)的DLL,使用NONAME 屬性可以減小 DLL文件的大小。有關(guān)編寫模塊定義語(yǔ)句的信息,請(qǐng)參見(jiàn)模塊定義語(yǔ)句的規(guī)則。有關(guān)序號(hào)導(dǎo)出的更多信息,請(qǐng)參見(jiàn)按序號(hào)而不是按名稱從 DLL 導(dǎo)出函數(shù)。

使用 .def 文件的主要缺點(diǎn)是:在 C++ 文件中導(dǎo)出函數(shù)時(shí),必須將修飾名放到 .def 文件中,或者通過(guò)使用外部“C”用標(biāo)準(zhǔn) C鏈接定義導(dǎo)出函數(shù),以避免編譯器進(jìn)行名稱修飾。如果需要將修飾名放到 .def 文件中,則可以通過(guò)使用 DUMPBIN 工具或 /MAP鏈接器選項(xiàng)來(lái)獲取修飾名。請(qǐng)注意,編譯器產(chǎn)生的修飾名是編譯器特定的。如果將 Visual C++ 編譯器產(chǎn)生的修飾名放到 .def文件中,則鏈接到 DLL 的應(yīng)用程序必須也是用相同版本的 Visual C++ 生成的,這樣調(diào)用應(yīng)用程序中的修飾名才能與 DLL 的 .def文件中的導(dǎo)出名相匹配。
文章出處:DIY部落(http://www.diybl.com/course/3_program/c++/cppxl/2008105/147591.html)

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用 __declspec(dllexport) 從 DLL 導(dǎo)出
DLL中.def文件的使用
c++生成dll
UC頭條:靜態(tài)鏈接庫(kù),動(dòng)態(tài)鏈接庫(kù)[滴水逆向三期48筆記](méi)(下)
VC 動(dòng)態(tài)鏈接庫(kù)(DLL)編程深入淺出
靜態(tài)鏈接庫(kù)與動(dòng)態(tài)鏈接庫(kù)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服