2012-12-19 57 views
4

我有一個需要動態加載DLL的MFC應用程序。該DLL將用於檢索運行時值,然後被卸載。我是否需要創建一個MFC DLL並通過AfxLoadLibrary()加載它,還是我可以創建傳統的C++ dll並使用Win32 LoadLibrary()調用?有關係嗎?AfxLoadLibrary與LoadLibrary

+0

您是否打算在要創建的庫中使用MFC? –

+0

否。該DLL嚴格爲C++,不包含任何基於AFX的頭文件。 –

回答

8

它在MSDN庫文章的註釋部分明確提到:

一定要使用(而不是Win32函數LoadLibrary和FreeLibrary則)AfxLoadLibrary和AfxFreeLibrary如果應用程序使用多個線程,如果它動態加載擴展DLL。使用AfxLoadLibrary和AfxFreeLibrary可確保在加載和卸載擴展DLL時執行的啓動和關閉代碼不會損壞全局MFC狀態。

所以,如果你正在加載一個包含MFC代碼的DLL,或者如果你在你的程序中使用線程,那麼你應該使用它。

這就是說,至少在MFC,AfxLoadLibrary的現代版本()不會做什麼特別的:

HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName) 
{ 
    ASSERT(lpszModuleName != NULL); 
    HINSTANCE hInstLib = LoadLibrary(lpszModuleName); 
    return hInstLib; 
} 

所以沒有什麼會嚴重炸燬,如果你猜錯了這個。謝天謝地。

+0

@nobugz,用我的術語幫助我。是一個簡單的C++ DLL被認爲是「擴展DLL?」在提出我的問題之前,我已經閱讀了這篇文章,但我只是被它迷惑了。從某種意義上說,所有的DLL都是「擴展」,但我的閱讀是MSDN更多地提到MFC如何使用DLL。我錯了嗎? –

+3

這是MFC-說「包含MFC代碼的DLL」。這就是狀態doowop的意思,這種DLL必須連接到MFC應用程序模型中。 –

+0

謝謝。我也這麼想。 –

3

如果您正在創建一個完全不使用MFC的普通C++ DLL,則不需要創建MFC DLL,而應該可以使用普通的LoadLibrary()