VS C++生成dll和静态调用dll的方法
一、動(dòng)態(tài)鏈接庫(kù)(dll)概述
在實(shí)際編程中,我們可以把完成某項(xiàng)功能的函數(shù)放在一個(gè)動(dòng)態(tài)鏈接庫(kù)里,然后提供給其他程序調(diào)用。
1.1 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)
靜態(tài)庫(kù):
函數(shù)和數(shù)據(jù)被編譯進(jìn)一個(gè)二進(jìn)制文件(擴(kuò)展名通常為.lib),在使用靜態(tài)庫(kù)的情況下,在編譯鏈接可執(zhí)行文件時(shí),鏈接器從靜態(tài)庫(kù)中復(fù)制這些函數(shù)和數(shù)據(jù),并把它們和應(yīng)用程序的其他模塊組合起來(lái)創(chuàng)建最終的可執(zhí)行文件(.exe)。當(dāng)發(fā)布產(chǎn)品時(shí),只需要發(fā)布這個(gè)可執(zhí)行文件,并不需要發(fā)布被使用的靜態(tài)庫(kù)。
動(dòng)態(tài)庫(kù):
在使用動(dòng)態(tài)庫(kù)時(shí),往往提供兩個(gè)文件:一個(gè)引入庫(kù)(.lib,非必須)和一個(gè).dll文件。這里的引入庫(kù)和靜態(tài)庫(kù)文件雖然擴(kuò)展名都是.lib,但是有著本質(zhì)上的區(qū)別,對(duì)于一個(gè)動(dòng)態(tài)鏈接庫(kù)來(lái)說(shuō),其引入庫(kù)文件包含該動(dòng)態(tài)庫(kù)導(dǎo)出的函數(shù)和變量的符號(hào)名,而.dll文件包含該動(dòng)態(tài)庫(kù)實(shí)際的函數(shù)和數(shù)據(jù)。
1.2 使用動(dòng)態(tài)鏈接庫(kù)的好處
1. 可以使用多種編程語(yǔ)言編寫(xiě):
比如我們可以用VC++編寫(xiě)dll,然后在VB編寫(xiě)的程序中調(diào)用它。
2. 增強(qiáng)產(chǎn)品功能:
可以通過(guò)開(kāi)發(fā)新的dll取代產(chǎn)品原有的dll,達(dá)到增強(qiáng)產(chǎn)品性能的目的。比如我們看到很多產(chǎn)品踢動(dòng)了界面插件功能,允許用戶動(dòng)態(tài)地更換程序的界面,這就可以通過(guò)更換界面dll來(lái)實(shí)現(xiàn)。
3. 提供二次開(kāi)發(fā)的平臺(tái):
用戶可以單獨(dú)利用dll調(diào)用其中實(shí)現(xiàn)的功能,來(lái)完成其他應(yīng)用,實(shí)現(xiàn)二次開(kāi)發(fā)。
4. 節(jié)省內(nèi)存:
如果多個(gè)應(yīng)用程序使用同一個(gè)dll,該dll的頁(yè)面只需要存入內(nèi)存一次,所有的應(yīng)用程序都可以共享它的頁(yè)面,從而節(jié)省內(nèi)存。
二、dll的創(chuàng)建
第一步: 創(chuàng)建cpp 和 h 文件。
1、在VS中創(chuàng)建xxx.h, xxx.cpp
2、xxx.h 內(nèi)容格式如下:
#ifdef BUILD_XXX_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif
extern “C”{
EXPORT void example(void); //被調(diào)用的函數(shù)聲明
… …
}
xxx.cpp內(nèi)容格如下:
#define BUILD_XXX_DLL
#include “xxx.h”
void example(void) //被調(diào)用的函數(shù)
{
}
… …
注意:
1.__declspec是關(guān)鍵字,用于表示該函數(shù)、變量是導(dǎo)出、導(dǎo)入的,括號(hào)里dllexport意為其將要導(dǎo)出,dllimport意為其將要導(dǎo)入。
2.extern "C"用于指定編譯器編譯后的函數(shù)別名,這樣使用時(shí)才能正確查找到。即對(duì)于變量extern int a;這樣的直接寫(xiě)為extern “C” int a;即可,函數(shù)同理。
具體過(guò)程如下:
1、建立項(xiàng)目:
單擊下一步,選擇DLL方式,創(chuàng)建項(xiàng)目
建立MyCode.cpp 內(nèi)容如下:
建立 MyCode.h 內(nèi)容如下:
#ifndef _MYCODE_H_ #define _MYCODE_H_#ifdef DLLDEMO_EXPORTS #define EXPORTS_DEMO _declspec( dllexport ) #else #define EXPORTS_DEMO _declspec(dllimport) #endifextern "C" EXPORTS_DEMO int Add(int a, int b);#endif第二步:生成解決方案。
此時(shí)自動(dòng)生成了MyCode,此時(shí)在項(xiàng)目的debug 文件下會(huì)自動(dòng)生成MyDLLDemo.dll 和 MyDLLDemo.lib 文件。
三、dll的使用
移除 stdafx.cpp, stdafx.h,targetver.h
myProject 項(xiàng)目中只剩下 myProject.cpp 文件
右鍵,設(shè)定myProject 項(xiàng)目為啟動(dòng)項(xiàng)。
在myProject.cpp 右鍵,彈出的屬性對(duì)話框中,選擇不使用預(yù)編譯頭。
修改myProject.cpp 文檔內(nèi)容,如下:
最后 運(yùn)行,OK!調(diào)用成功。
總結(jié)
以上是生活随笔為你收集整理的VS C++生成dll和静态调用dll的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#泛型的简单理解
- 下一篇: c++ vector 赋值_C++中ve