vs2013創建及使用DLL


  這幾天看了許多關於生成Dll的博文,很有感觸,遂整理在此,以供自己后續參考。

VS2013創建DLL

我們使用vs2013來生成Dll,其實使用其他的版本也是同理如此。步驟如下:

  單擊“新建項目”,選擇“Win32 項目”,選擇“下一步”,然后到了如下界面:

點擊“DLL”,並同時點擊“導出符號”。然后點擊“完成”。

值得說明的是:

為什么要導出符號呢?

這是因為“導出符號”,將為我們創建生成DLL的模板。




仔細觀察,vs自動為我們創建了導出變量nMakeDLL,導出函數fnMakeDLL,導出類CMakeDLL。如果上面沒有點擊“導出符號”,將不會生成這些。所以為了方便DLL的創建,我們最好還是使用“導出符號”。

接下來,你可以改寫上面的類和函數,然后點擊項目,選擇“生成”即可產生DLL和LIB。此處細節可參考《vs2010創建並使用DLL》。

細節的闡述

1.dllexport與dllimport的介紹

先看下面這段代碼:

#ifdef MAKEDLL_EXPORTS
#define MAKEDLL_API __declspec(dllexport)
#else
#define MAKEDLL_API __declspec(dllimport)
#endif

我們逐條解釋。

如果定義了MAKEDLL_EXPORTS,然后我們再定義MAKEDLL_API為__declspec(dllexport),否則我們定義__declspec(dllimport)。前者主要為生成DLL的項目所使用,后者為使用DLL的項目所使用。dllexport  dllimport 存儲類特性是 C 和 C++ 語言的 Microsoft 專用擴展。可以使用它們從 DLL 中導出或向其中導入函數、數據和對象。使用這兩個特性,將會優化導入導出,至於具體怎么優化,可參考msdn上的解讀《dllexport,dllimport》.

事實上MAKEDLL_EXPORTS在創建DLL時是默認定義的,每當創建一個新的DLL項目時,vs會自動生成MAKEDLL_EXPORTS,我們可以在項目的屬性中看到:


2.lib與dll的使用

而在引用一個新的dll時,比如我們采用靜態引用的方法時,我們一般需要dll的.h,.lib和.dll三個文件,這時我們在新建項目的“屬性”中選擇“C/C++”-》“常規”-》“附加包含目錄”,添加.h的路徑,在“鏈接器”—》“常規”-》“附加庫目錄”中添加.lib的路徑,同時我們還需要添加.lib的附加依賴項,這時可在“鏈接器”—》“輸入”—》“附加依賴項”,填寫**.lib ,最后還需要加載dll的路徑,此時有兩種方法最為常見。第一種,我們先直接運行程序,這時會出現一個錯誤,說“缺少什么dll”,我們只需將此前生成的dll,放在debug或release目錄下,即可編譯通過。第二種方法,直接將dll放在與.cpp同一目錄下,即可編譯通過。或者你也可以放在某一個新建的bin文件下,然后在項目的“path”中填寫.bin的路徑,如下所示:

填寫路徑時注意,前面的"path=%path%;" 必須有,后面可填寫絕對路徑相對路徑

另外我們再仔細講講lib的使用。

使用lib庫有兩個方法,一個是直接把lib引到工程目錄下,在需要用到的地方include一下就可以。代碼是:

#pragma comment(lib, "testCpp.lib")

另外一個方法是直接設置庫路徑,就不用把lib引到工程目錄下了。直接點開工程屬性,在配置屬性-》連接器-》常規-》附加庫目錄中添加庫

vs2013生成lib4


vs2013生成lib5


之后確認。

在配置屬性-》連接器-》輸入-》附加依賴項。如圖填寫

vs2013生成lib6


之后確定,運行工程就可以了。

總結一下,我們使用別人的庫時,如果想偷懶的話,將.h,.lib,.dll都放在工程目錄下,最后會發現我們需要在使用dll的main函數中加載上頭文件,再像第一種方法一樣,鏈接lib,就可以直接使用了。可參考文件:testDLL.zip

但是我更推崇另一種方法,就是我們單獨建立include,bin,lib文件夾,然后將他們分別按照上面的方法鏈接上。這樣如果要添加的庫比較多時,會更加整齊,可讀。

總的來說;.h,.lib,.dll的添加方法其實各有很多種,其中.h有兩種:

1. 直接放在工程目錄下

2. 建立include文件夾,放在里面,然后在項目屬性的“C/C++”-》“常規”-》“附加包含目錄”,添加.h路徑即可。

.lib的方法有兩種

1.直接放在工程目錄下

2.建立lib文件夾,放在里面,然后在項目屬性的“鏈接器”-》“常規”-》“附加庫目錄”,添加.lib路徑即可。

dll的方法有兩種

1.直接放在工程目錄下

2.建立bin文件夾,放在里面,然后在項目“環境”中添加bin的路徑

.lib的附加依賴項有2種:

1.在“鏈接器”——》“輸入”-》“附加依賴項”,填寫lib名稱

2.在main文件前面,添加語句:

#pragma comment(lib, "testCpp.lib")
以上皆可以自由組合。



參考文獻:

1.演練:創建和使用動態鏈接庫 (C++)

2. C++的dllexport和dllimport 

3.VS2013創建dll動態鏈接庫文件心得

4.VS2010創建並使用DLL













        



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com