1. 程式人生 > >dll靜態調用和動態調用

dll靜態調用和動態調用

pro color 獲取 成了 lin 引用 oca log 常用

動態鏈接庫有2種連接方式,一種是通過庫直接加入(又叫隱式加載或載入時加載),一種是在運行時加入。後者很好理解,比如LoadLibrary(),GetProcAddress()獲取想要引入的函數,使用完後,就FreeLibrary()。

在創建DllTest.exe文件之前,要先將MyDll.dll和MyDll.lib拷貝到當前工程所在的目錄下面,也可以拷貝到windows的System目錄下。如果DLL使用的是def文件,要刪除TestDll.h文件中關鍵字extern "C"。TestDll.h文件中的關鍵字Progam commit是要Visual C+的編譯器在link時,鏈接到MyDll.lib文件,當然,開發人員也可以不使用#pragma comment(lib,"MyDll.lib")語句,而直接在工程的Setting->Link頁的Object/Moduls欄填入MyDll.lib既可。

軟件工程方面能夠快速的發展,我相信源代碼重用起到了不可忽略的作用。在Linux平臺下就C++而言,有以so結尾的動態鏈接庫文件,也有以.a結尾的靜態連接庫文件,這個有著明顯的區別。但是在Window平臺下,通過Visual Studio編譯動態鏈接庫DLL這類項目時,即生成了目的動態鏈接庫DLL文件,同時還有一個同名的LIB文件。單獨編譯靜態連接庫項目時也生成了目標靜態鏈接庫LIB文件


**動態鏈接庫**
在其他項目中需要引用動態連接庫時,需要把動態連接庫的LIB文件作為資源引入到新項目當中,這樣在生成項目時才能夠編譯成功,這個過程當中並用不到DLL動態連接庫文件。只有當編譯完成,在運行階段才需要使用DLL文件,沒有的話則引發異常。

在Visual Studio中使用DLL-項目引用鏈接lib

使用一個DLL,需要在工程配置添加lib,或直在代碼中包含lib,也可以在運行時動態鏈接,常用的加載方法有兩種:


在附加依賴項中添加 lib
項目右鍵->屬性->配置屬性->鏈接器->常規->附加庫目錄,輸入lib所在目錄,如 TestPath

項目右鍵->屬性->配置屬性->鏈接器->輸入->附加依賴項,輸入需要的lib名,如 Testlib_x64.lib

用 #pragma 添加 lib,需指明路徑
#pragma comment(lib, “./TestPath/Testlib_x64.lib”)

最近發現,在VS中添加項目之間的引用可以達到同樣的效果而無需配置和包含lib,同時項目引用會自動關聯lib項目生成lib的路徑


項目引用,自動加載lib
項目右鍵->屬性->通用屬性->引用->添加新引用->選擇需要依賴的lib項目

調用DLL有兩種方法——靜態調用和動態調用
(一).靜態調用其步驟如下:
1.把你的youApp.DLL拷到你目標工程(需調用youApp.DLL的工程)的Debug目錄下;
2.把你的youApp.lib拷到你目標工程(需調用youApp.DLL的工程)目錄下;
3.把你的youApp.h(包含輸出函數的定義)拷到你目標工程(需調用youApp.DLL的工程)目
錄下;

https://blog.csdn.net/ebxds/article/details/40950539

https://blog.csdn.net/zhongjling/article/details/8078537

dll靜態調用和動態調用