我有一個需要動態加載DLL的MFC應用程序。該DLL將用於檢索運行時值,然後被卸載。我是否需要創建一個MFC DLL並通過AfxLoadLibrary()
加載它,還是我可以創建傳統的C++ dll並使用Win32 LoadLibrary()
調用?有關係嗎?AfxLoadLibrary與LoadLibrary
回答
它在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;
}
所以沒有什麼會嚴重炸燬,如果你猜錯了這個。謝天謝地。
@nobugz,用我的術語幫助我。是一個簡單的C++ DLL被認爲是「擴展DLL?」在提出我的問題之前,我已經閱讀了這篇文章,但我只是被它迷惑了。從某種意義上說,所有的DLL都是「擴展」,但我的閱讀是MSDN更多地提到MFC如何使用DLL。我錯了嗎? –
這是MFC-說「包含MFC代碼的DLL」。這就是狀態doowop的意思,這種DLL必須連接到MFC應用程序模型中。 –
謝謝。我也這麼想。 –
如果您正在創建一個完全不使用MFC的普通C++ DLL,則不需要創建MFC DLL,而應該可以使用普通的LoadLibrary()
。
- 1. AfxLoadLibrary/ParseCommandLine失敗,ERROR_NOACCESS
- 2. LoadLibrary python與dll寫在c + +
- 3. 調用LoadLibrary失敗與GetLastError函數()== 0
- 4. LoadLibrary取LPCTSTR
- 5. LoadLibrary 998錯誤
- 6. 帶LoadLibrary的STATUS_STACK_BUFFER_OVERRUN
- 7. LoadLibrary(「MSVCR90D.dll」)失敗
- 8. LoadLibrary(xx.dll),錯誤126
- 9. 跟蹤LoadLibrary或LdrLoadDll
- 10. loadlibrary之後的NoClassDefFoundError
- 11. Python LoadLibrary找不到
- 12. Android NDK LoadLibrary(「KERNEL32.DLL」)
- 13. 的LoadLibrary引用計數
- 14. LoadLibrary()錯誤代碼998
- 15. LoadLibrary和GetProcAddress在Ruby中
- 16. LoadLibrary ...失敗。缺少dll
- 17. 是否winbase :: LoadLibrary()加載.pdbs?
- 18. 來自byte []的C#LoadLibrary
- 19. Java中的loadlibrary問題
- 20. 調用LoadLibrary MSVCRT問題
- 21. Vista下的LoadLibrary失敗x64
- 22. 使用LoadLibrary加載DLL
- 23. JNI - UnsatisfiedLinkError - loadLibrary總是失敗
- 24. LoadLibrary函數 - 編譯錯誤
- 25. 德爾福loadlibrary錯誤()
- 26. 掛鉤LoadLibrary API調用
- 27. 防止太多LoadLibrary/FreeLibrary
- 28. 使用LoadLibrary,效果表現?
- 29. DLL在哪裏調用LoadLibrary?
- 30. 調用LoadLibrary訪問衝突
您是否打算在要創建的庫中使用MFC? –
否。該DLL嚴格爲C++,不包含任何基於AFX的頭文件。 –