Dll入口函式引數詳解

2021-08-31 13:20:50 字數 1808 閱讀 4432

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

dll程式入口點函式:dllmain,注意:大小寫是區別的(僅匯出資源的dll可以沒有dllmain函式)。

函式原型:

bool apientry dllmain

( hmodule hmodule,                       dword  ul_reason_for_call,                       lpvoid lpreserved                     )

引數意義:

①hmodule引數:指向dll本身的例項控制代碼;

②ul_reason_for_call引數:指明了dll被呼叫的原因,可以有以下4個取值:

1. dll_process_attach:

當dll被程序 《第一次》 呼叫時,導致dllmain函式被呼叫,

同時ul_reason_for_call的值為dll_process_attach,

如果同乙個程序後來再次呼叫此dll時,作業系統只會增加dll的使用次數,

不會再用dll_process_attach呼叫dll的dllmain函式。

2.dll_process_detach:

當dll被從程序的位址空間解除對映時,系統呼叫了它的dllmain,傳遞的ul_reason_for_call值是dll_process_detach。

★如果程序的終結是因為呼叫了terminateprocess,系統就不會用dll_process_detach來呼叫dll的dllmain函式。這就意味著dll在程序結束前沒有機會執行任何清理工作。

並用值dll_thread_attach呼叫dll的dllmain函式。

新建立的執行緒負責執行這次的dll的dllmain函式,

只有當所有的dll都處理完這一通知後,系統才允許執行緒開始執行它的執行緒函式。

4.dll_thread_detach:

如果執行緒呼叫了exitthread來結束執行緒(執行緒函式返回時,系統也會自動呼叫exitthread),

系統檢視當前對映到程序空間中的所有dll檔案映像,

並用dll_thread_detach來呼叫dllmain函式,

通知所有的dll去執行執行緒級的清理工作。

★注意:如果執行緒的結束是因為系統中的乙個執行緒呼叫了terminatethread,

系統就不會用值dll_thread_detach來呼叫所有dll的dllmain函式。

③lpreserved引數:保留,目前沒什麼意義。

給我老師的人工智慧教程打call!

Dll入口函式引數詳解

dll程式入口點函式 dllmain,注意 大小寫是區別的 僅匯出資源的dll可以沒有dllmain函式 函式原型 bool apientry dllmain hmodule hmodule,dword ul reason for call,lpvoid lpreserved 引數意義 hmodul...

DLL入口函式DllMain

bool apientry dllmain hmodule hmodule,dword ul reason for call,lpvoid lpreserved return true 通過第二個引數ul reason for call來區分當前dll狀態 dll process attach 當乙...

C main函式以及入口引數詳解

一 main函式的基本介紹 1 main函式是工程的入口主函式。二 main函式的示例 1 示例一 include int main 2 示例二怕 譚浩強 c語言程式設計 第四版 10.7.3 include int main argc,char argv 3 示例三 include int mai...