隱式載入各目錄DLL

2021-06-16 13:54:47 字數 1324 閱讀 2188

因為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.標...