2011-03-29 140 views
4

DllMain Entry Point documentation,筆者作出如下評論:如何創建DLL初始化例程?

爲客戶提供更復雜的初始化,創建該DLL的初始化程序。您可以要求應用程序在調用DLL中的任何其他例程之前調用初始化例程。

在C/C++中,如何創建不同的例程並要求應用程序在任何其他應用程序之前調用它?

+0

您需要在文檔中提醒讀者幾次。仔細檢查完成是明智的。但是,如果這是可能的,那麼你也可以懶惰地初始化它。 – 2011-03-30 00:19:47

+0

如果初始化需要參數,則懶惰初始化可能不可行。 – 2011-03-30 08:29:07

回答

2

初始化程序可以是任何exported功能。訣竅是「要求其他應用程序調用它」。爲了執行它,你需要檢查它是否在幾乎所有其他導出的函數中被調用。如果每個導出的函數都有一些通用的前綴代碼,那麼這將是檢查初始化函數是否被調用的好地方。

但是,如果您必須檢查它是否在每個入口點都被調用過,那麼如果實際上沒有調用該函數,那麼對於DLL的使用者可能會更容易。這確實需要一些額外的工作來使它最有可能是安全的。你需要一個臨界區(或互斥量,信號量等)來確保它只被調用一次。

2

這個的典型例子是InitCommonControlsEx()。你必須讓你的DLL的用戶以同樣的方式調用你的初始化和終結例程。