3 回答

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
1、The DllMain function is an optional method of entry into a dynamic-link library (DLL)。(簡(jiǎn)要翻譯:對(duì)于動(dòng)態(tài)鏈接庫(kù),DllMain是一個(gè)可選的入口函數(shù)。)這句話很重要,很多初學(xué)者可能都認(rèn)為一個(gè)動(dòng)態(tài)鏈接庫(kù)肯定要有DllMain函數(shù)。其實(shí)不然,像很多僅僅包含資源信息的DLL是沒(méi)有DllMain函數(shù)的。
2、系統(tǒng)是在什么時(shí)候調(diào)用DllMain函數(shù)的呢?靜態(tài)鏈接時(shí),或動(dòng)態(tài)鏈接時(shí)調(diào)用LoadLibrary和FreeLibrary都會(huì)調(diào)用DllMain函數(shù)。DllMain的第二個(gè)參數(shù)fdwReason指明了系統(tǒng)調(diào)用Dll的原因,它可能是::DLL_PROCESS_ATTACH、DLL_PROCESS_DETACHDLL_THREAD_ATTAC、
DLL_THREAD_DETACH。
以下從這四種情況來(lái)分析系統(tǒng)何時(shí)調(diào)用了DllMain。
3、DllMain函數(shù)是DLL模塊的默認(rèn)入口點(diǎn)。當(dāng)Windows加載DLL模塊時(shí)調(diào)用這一函數(shù)。系統(tǒng)首先調(diào)用全局對(duì)象的構(gòu)造函數(shù),然后調(diào)用全局函數(shù)DLLMain。DLLMain函數(shù)不僅在將DLL鏈接加載到進(jìn)程時(shí)被調(diào)用,在DLL模塊與進(jìn)程分離時(shí)(以及其它時(shí)候)也被調(diào)用。

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
DllMain函數(shù)是Dll的入口點(diǎn)函數(shù),DllMain函數(shù)的原型是BOOL WINAPI DllMain(HISNTANCE hInst, DWORD dwReason, LPVOID);,可在cpp的任何地方來(lái)定義這個(gè)函數(shù)。一般地,對(duì)于C\C++程序來(lái)說(shuō),這個(gè)DllMain并不是Dll的真正的入口點(diǎn),真正的入口點(diǎn)是C\C++運(yùn)行時(shí)庫(kù)的入口點(diǎn),C\C++運(yùn)行時(shí)庫(kù)在進(jìn)行一些初始化后,才會(huì)調(diào)用你提供的DllMain函數(shù)。如果想讓自己的DllMain成為真正的入口點(diǎn)函數(shù),可以在鏈接選項(xiàng)里,把“入口點(diǎn)”改成DllMain。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
- 3 回答
- 0 關(guān)注
- 901 瀏覽
添加回答
舉報(bào)