我需要從另一個DLL中加載一個DLL。誘惑是將它加載到DllMain中,但已經有令人信服的文檔說明它是一個「壞主意」。有從另一個DLL中加載DLL的最佳做法嗎?
冒着問一個不是很具體的問題:是否有從另一個DLL加載DLL的最佳做法?
在我們當前的項目中,我們的主DLL有一個類。我從該類的構造函數中加載第二個DLL。但是,由於該類可以在DLL中多次實例化,因此我在其周圍保留一個變量以指示是否先前加載了DLL,以便不再次調用LoadLibrary。這不知何故不覺得這是一個好的解決方案,因此我的問題。
對於它的價值,你的解決方案根本不算什麼 - 這是非常普遍的。這是一個簡單而優雅的方法來解決這個問題,而不需要在DLL中增加一些額外的初始化函數。我會把它放在像'EnsureOtherDLLLoaded'之類的函數中。 – tenfour
你的解決方案很好。事實上,你甚至不需要跟蹤它是否已經被加載。在這個過程中再次調用LoadLibrary是很好的。 Windows將爲該庫保留引用計數,並且不會卸載它,直到FreeLibrary調用的次數與LoadLibrary調用的次數相匹配。 –