3 回答

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

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

TA貢獻1784條經(jīng)驗 獲得超7個贊
- 3 回答
- 0 關(guān)注
- 916 瀏覽
添加回答
舉報