因為windows中,隱式鏈結的dll,載入方式由系統控制,dll只能放在固定的目錄中,才能被exe載入。最近做的乙個專案中,由於有近100個不同功能的dll,如果統一存放在exe目錄下,不便於管理。
以下分享如何使windows按照自己的方式載入dll。
直接上**:
cdloader.h代
[cpp]view plain
copy
print?
#include
#pragma once
class cdloader
virtual ~cdloader(void)
bool adddll(lpctstr pszdllfilename)
protected:
void onfreelib()
private:
vector m_modeules;
}
#include
#pragma once
class cdloader
virtual ~cdloader(void)
bool adddll(lpctstr pszdllfilename)
protected:
void onfreelib()
在主程式中include cdloader.h,然後在程式初始化的地方加入以下**:
[html]view plain
copy
print?
static cdloader dl;
dl.adddll("你的dll1路徑");
dl.adddll("你的dll2路徑");
...
dl.adddll("你的dlln路徑");
static cdloader dl;
dl.adddll("你的dll1路徑");
dl.adddll("你的dll2路徑");
...dl.adddll("你的dlln路徑");
然後將編譯選項中的dll載入方式設定為「延遲載入」。
ok,大功告成!
原理:因為windows不會重複載入相同名字的dll,當windows系統需要載入dll時,發現該dll已經被你載入過了,只是增加乙個引用計數,然後直接使用已載入的dll。
當然這種方法也不是萬能的,由於以上原理,需要載入的dll只能在系統載入之前,自己先載入,然而,一些關鍵的dll(如vc執行庫),在程式一啟動時就自動載入了,所以不適合這種方法。
dll的隱式鏈結
在應用程式 或另乙個d l l 能夠呼叫d l l中的函式之前,d l l檔案映像必須被對映到呼叫程序的位址空間中。若要進行這項操作,可以使用兩種方法中的一種,即載入時的隱含鏈結或執行期的顯式鏈結。這裡主要介紹隱式鏈結。若要建立d l l模組,必須執行下列操作步驟 1 首先必須建立乙個標頭檔案,它包...
Qt隱式 顯式呼叫DLL
下面是我對qt隱式 顯式呼叫dll一點理解,我參考的相關 會在下面羅列出來 顯示呼叫 這裡我覺得的例子挺好的,使用qt建立了乙個加法函式和查詢頁面並封裝成dll以供qt呼叫。在標頭檔案 裡申明dll共享介面 include mytestdll global.h include qdialog.h e...
QT隱式呼叫DLL檔案
開發環境必須是qtcreater32bit msvc32bit,因為pacpci2和pciapi是32bit的dll 0.隱式呼叫必須有三個檔案,dll檔案,lib檔案,h檔案 1.將lib,dll檔案放入對應debug構建的目錄下,然後右鍵專案 新增外部庫 新增靜態庫檔案 預設操作完成就行 2.標...