1、前言
dll文件是啥,就不作過多贅述了。現在直接教大家如何創建與使用dll文件。
本文基于windows系統,使用的編譯相關工具為visual studio 2019。
2、創建dll
2.1 創建dll工程
首先打開visual studio,然后選擇創建新項目,在搜索框中輸入dll,然后選擇下面的動態鏈接庫(DLL)即可,然后點擊下一步。
在配置新項目這一步,可以根據自己的需要,設置項目名稱、位置等即可。設置前好之后點擊創建即可。
2.2 刪除多余的文件并添加源文件
在創建的dll解決方案中可以看到,系統已經預生成了一些頭文件和源文件。這些是系統預生成的,本身與創建dll關系不是很大,為了幫助大家理解。可以暫時先移除這些文件。
移除這些文件的方法是,依次在每個文件上右鍵,然后選擇移除。
這樣就可以移除每個文件
移除完之后,源文件、頭文件目錄均為空,然后就可以添加文自己的文件了。
首先在頭文件目錄上右鍵,然后選擇添加 - ->新建項
然后選擇標頭,然后輸入標頭文件名即可。
然后用同樣的方法,在源文件目錄上右鍵,然后選擇添加 -> 新建項
然后選擇c++源文件,然后輸入源文件名。
操作完成之后,可以看到頭文件和源文件目錄下面分別各有一個文件。
2.3 編寫源文件
首先編寫頭文件,內容如下:
// math.h
#ifdef MYDLL_EXPORTS
#define MATH_API __declspec(dllexport)
#else
#define MATH_API __declspec(dllimport)
#endif
MATH_API int Add(int a, int b);
MATH_API int Sub(int a, int b);
這里需要做一個簡單的說明:
由于這個頭文件,dll本身源文件(math.cpp)以及使用dll的文件都會使用,因此需要一個導出接口和一個導入接口。
對于dll文件本身來說,它需要一個導出接口,這樣這個dll文件才能被其它程序調用;
對于其它程序來講,它需要一個導入接口,這樣就可以導入dll文件并使用了。
為了到達這個目的,通過條件編譯的方式,在本工程中會自動定義一個宏MYDLL_EXPORTS, 這樣dll文件項目本身就是導入接口,由于在其他項目中沒有定義宏MATH_EXPORTS,這樣就會使用導入接口。
下面接著編寫源文件,源文件內容如下:
// math.cpp
#include "math.h"
int Add(int a, int b) {return a + b;
}
int Sub(int a, int b) {return a - b;
}
2.3 生成dll文件
在生成dll之前,還需要明確生成的版本,到底是release版本,還是debug版本,到底是x64,還是x86。
這里本身可能影響不大,但是dll的版本和使用dll的版本一定要一致。比如生成dll使用的debug/x64,那么使用dll文件的項目,也只能是debug/x64。
然后在myDll解決方案上右鍵,點擊生成即可。
不出意外的話,生成結果是失敗的,并且提示:
這是因為我們在步驟2.1中刪除了一些文件。
這是需要刪除相關預編譯頭。具體做法如下:
在myDll解決方案上右鍵 -> 屬性,在預編譯頭選擇不使用預編譯頭。
設置好之后,然后重新生成,就可以在相關目錄下面看到生成的dll文件了。
至此dll文件就生成成功,然后其它項目就可以調用該dll文件了。