在MFC中,我用LoadLibrary動態加載dll,這個dll一直在使用沒有卸載,當加載到80多個的時候,呼叫LoadLibrary就一直回傳空了,請問這個加載dll有個數的限制嗎?
uj5u.com熱心網友回復:
是不是記憶體/資源不足了? GetLastError 看錯誤代碼uj5u.com熱心網友回復:
錯誤代碼含義
0
系統記憶體不夠,可執行檔案被破壞或呼叫非法
2
檔案沒有被發現
3
路徑沒有被發現
5
企圖動態鏈接一個任務錯誤或者有一個共享或網路保護錯誤
6
庫需要為每個任務建立分離的資料段
8
沒有足夠的記憶體啟動應用程式
10
Windows 版本不正確
11
可執行檔案非法或不是Windows 應用程式,或在. EXE映像中有錯誤
12
應用程式為一個不同的作業系統設計(如 OS/2)
13
應用程式為 MS DOS 4. 0 設計
14
可執行檔案的型別不知道
15
試圖裝載一個實模式應用程式(為早期Windows 版本設計)
16
試圖裝載包含可寫的多個資料段的可執行檔案的第二個實體
19
試圖裝載一個壓縮的可執行檔案(檔案必須被解壓后才能被裝載)
20
DLL 檔案非法
21
應用程式需要 32 位擴展
uj5u.com熱心網友回復:
GetLastError回傳的錯誤碼為1114經過測驗是這樣的:
在回圈里連續呼叫LoadLibrary() 80多次后就再也無法加載dll了。
但是每次LoadLibrary() 之后再呼叫FreeLibrary釋放掉就可以無限加載了。但這樣做有違初衷,請問這個問題該怎么破?
uj5u.com熱心網友回復:
WinError.h:#define ERROR_DLL_INIT_FAILED 1114Luj5u.com熱心網友回復:
加載同一個dll嗎,dll 初始化干了啥uj5u.com熱心網友回復:
不是加載同一個dll,加載不同的dll有不同的用處,應該是沒呼叫FreeLibrary釋放的緣故,但是dll還沒用完是不能釋放的。
uj5u.com熱心網友回復:
出問題的總是某個dll? 還是隨機的uj5u.com熱心網友回復:
是加載dll個數的問題,如果不呼叫FreeLibrary釋放掉已加載的dll,加載個數是有限的
uj5u.com熱心網友回復:
當我呼叫FreeLibrary釋放掉已加載的dll,就可以加載無限個dll了,
應該是記憶體資源不足吧?但是這個地方還不能釋放掉,這個問題咋破呢?
uj5u.com熱心網友回復:
在現實世界中,除時間和空間可能是無限的以外,其它任何事物都是有限的。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/111011.html
標籤:進程/線程/DLL
下一篇:MFC事件處理--電機運動控制
