4 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(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是沒有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。
以下從這四種情況來分析系統(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)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
DllMain函數(shù)是Dll的入口點(diǎn)函數(shù),DllMain函數(shù)的原型是BOOL WINAPI DllMain(HISNTANCE hInst, DWORD dwReason, LPVOID);,可在cpp的任何地方來定義這個(gè)函數(shù)。一般地,對(duì)于C\C++程序來說,這個(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)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果你知道怎么新建工程請(qǐng)往下看。如果不知道就當(dāng)我沒來過
新建一個(gè)WIN32的DLL工程
新建一個(gè)CPP源文件
添加如下代碼
BOOL WINAPI DllMain(
HANDLE hinstDLL,
DWORD dwReason,
LPVOID lpvReserved)
{
return TRUE;
}
就完成了DLLMAIN的編寫了

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
構(gòu)建 MFC 工程
在 源文件
\src\mfc\dllmodule.cpp
中
打開它,里面有有一個(gè)DLLMAIN函數(shù)
- 4 回答
- 0 關(guān)注
- 822 瀏覽
添加回答
舉報(bào)