vs2013创建及使用DLL
? 這幾天看了許多關(guān)于生成Dll的博文,很有感觸,遂整理在此,以供自己后續(xù)參考。
VS2013創(chuàng)建DLL
我們使用vs2013來生成Dll,其實(shí)使用其他的版本也是同理如此。步驟如下:
? 單擊“新建項(xiàng)目”,選擇“Win32 項(xiàng)目”,選擇“下一步”,然后到了如下界面:
點(diǎn)擊“DLL”,并同時(shí)點(diǎn)擊“導(dǎo)出符號”。然后點(diǎn)擊“完成”。
值得說明的是:
為什么要導(dǎo)出符號呢?
這是因?yàn)椤皩?dǎo)出符號”,將為我們創(chuàng)建生成DLL的模板。
仔細(xì)觀察,vs自動(dòng)為我們創(chuàng)建了導(dǎo)出變量nMakeDLL,導(dǎo)出函數(shù)fnMakeDLL,導(dǎo)出類CMakeDLL。如果上面沒有點(diǎn)擊“導(dǎo)出符號”,將不會生成這些。所以為了方便DLL的創(chuàng)建,我們最好還是使用“導(dǎo)出符號”。
接下來,你可以改寫上面的類和函數(shù),然后點(diǎn)擊項(xiàng)目,選擇“生成”即可產(chǎn)生DLL和LIB。此處細(xì)節(jié)可參考《vs2010創(chuàng)建并使用DLL》。
細(xì)節(jié)的闡述
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的項(xiàng)目所使用,后者為使用DLL的項(xiàng)目所使用。dllexport?和?dllimport?存儲類特性是 C 和 C++ 語言的 Microsoft 專用擴(kuò)展。可以使用它們從 DLL 中導(dǎo)出或向其中導(dǎo)入函數(shù)、數(shù)據(jù)和對象。使用這兩個(gè)特性,將會優(yōu)化導(dǎo)入導(dǎo)出,至于具體怎么優(yōu)化,可參考msdn上的解讀《dllexport,dllimport》.
事實(shí)上MAKEDLL_EXPORTS在創(chuàng)建DLL時(shí)是默認(rèn)定義的,每當(dāng)創(chuàng)建一個(gè)新的DLL項(xiàng)目時(shí),vs會自動(dòng)生成MAKEDLL_EXPORTS,我們可以在項(xiàng)目的屬性中看到:
2.lib與dll的使用
而在引用一個(gè)新的dll時(shí),比如我們采用靜態(tài)引用的方法時(shí),我們一般需要dll的.h,.lib和.dll三個(gè)文件,這時(shí)我們在新建項(xiàng)目的“屬性”中選擇“C/C++”-》“常規(guī)”-》“附加包含目錄”,添加.h的路徑,在“鏈接器”—》“常規(guī)”-》“附加庫目錄”中添加.lib的路徑,同時(shí)我們還需要添加.lib的附加依賴項(xiàng),這時(shí)可在“鏈接器”—》“輸入”—》“附加依賴項(xiàng)”,填寫**.lib?,最后還需要加載dll的路徑,此時(shí)有兩種方法最為常見。第一種,我們先直接運(yùn)行程序,這時(shí)會出現(xiàn)一個(gè)錯(cuò)誤,說“缺少什么dll”,我們只需將此前生成的dll,放在debug或release目錄下,即可編譯通過。第二種方法,直接將dll放在與.cpp同一目錄下,即可編譯通過。或者你也可以放在某一個(gè)新建的bin文件下,然后在項(xiàng)目的“path”中填寫.bin的路徑,如下所示:
填寫路徑時(shí)注意,前面的"path=%path%;" 必須有,后面可填寫絕對路徑或相對路徑。
另外我們再仔細(xì)講講lib的使用。
使用lib庫有兩個(gè)方法,一個(gè)是直接把lib引到工程目錄下,在需要用到的地方include一下就可以。代碼是:
#pragma comment(lib, "testCpp.lib")另外一個(gè)方法是直接設(shè)置庫路徑,就不用把lib引到工程目錄下了。直接點(diǎn)開工程屬性,在配置屬性-》連接器-》常規(guī)-》附加庫目錄中添加庫
之后確認(rèn)。
在配置屬性-》連接器-》輸入-》附加依賴項(xiàng)。如圖填寫
之后確定,運(yùn)行工程就可以了。
總結(jié)一下,我們使用別人的庫時(shí),如果想偷懶的話,將.h,.lib,.dll都放在工程目錄下,最后會發(fā)現(xiàn)我們需要在使用dll的main函數(shù)中加載上頭文件,再像第一種方法一樣,鏈接lib,就可以直接使用了。可參考文件:testDLL.zip
但是我更推崇另一種方法,就是我們單獨(dú)建立include,bin,lib文件夾,然后將他們分別按照上面的方法鏈接上。這樣如果要添加的庫比較多時(shí),會更加整齊,可讀。
總的來說;.h,.lib,.dll的添加方法其實(shí)各有很多種,其中.h有兩種:
1. 直接放在工程目錄下
2. 建立include文件夾,放在里面,然后在項(xiàng)目屬性的“C/C++”-》“常規(guī)”-》“附加包含目錄”,添加.h路徑即可。
.lib的方法有兩種
1.直接放在工程目錄下
2.建立lib文件夾,放在里面,然后在項(xiàng)目屬性的“鏈接器”-》“常規(guī)”-》“附加庫目錄”,添加.lib路徑即可。
dll的方法有兩種
1.直接放在工程目錄下
2.建立bin文件夾,放在里面,然后在項(xiàng)目“環(huán)境”中添加bin的路徑
.lib的附加依賴項(xiàng)有2種:
1.在“鏈接器”——》“輸入”-》“附加依賴項(xiàng)”,填寫lib名稱
2.在main文件前面,添加語句:
#pragma comment(lib, "testCpp.lib")以上皆可以自由組合。
參考文獻(xiàn):
1.演練:創(chuàng)建和使用動(dòng)態(tài)鏈接庫 (C++)
2.?C++的dllexport和dllimport?
3.VS2013創(chuàng)建dll動(dòng)態(tài)鏈接庫文件心得
4.VS2010創(chuàng)建并使用DLL
????????
總結(jié)
以上是生活随笔為你收集整理的vs2013创建及使用DLL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是索引?索引类型有几种,各有什么特点
- 下一篇: python音乐制作_Python实现音