国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++中.dll與.lib文件的生成與使用

2020-02-24 14:33:01
字體:
供稿:網(wǎng)友

下面武林技術(shù)小編為大家?guī)硪黄狢++中.dll與.lib文件的生成與使用,小編覺得挺不錯(cuò)的,在這里分享出來給大家,也給大家做個(gè)參考,一起跟隨小編過來看看。

--------------------------------------------------------------------------------

兩種庫(kù):

?  包含了函數(shù)所在的DLL文件和文件中函數(shù)位置的信息(入口),代碼由運(yùn)行時(shí)加載在進(jìn)程空間中的DLL提供,稱為動(dòng)態(tài)鏈接庫(kù)dynamic link library。
?  包含函數(shù)代碼本身,在編譯時(shí)直接將代碼加入程序當(dāng)中,稱為靜態(tài)鏈接庫(kù)static link library。
共有兩種鏈接方式:

?  動(dòng)態(tài)鏈接使用動(dòng)態(tài)鏈接庫(kù),允許可執(zhí)行模塊(.dll文件或.exe文件)僅包含在運(yùn)行時(shí)定位DLL函數(shù)的可執(zhí)行代碼所需的信息。
?  靜態(tài)鏈接使用靜態(tài)鏈接庫(kù),鏈接器從靜態(tài)鏈接庫(kù)LIB獲取所有被引用函數(shù),并將庫(kù)同代碼一起放到可執(zhí)行文件中。

--------------------------------------------------------------------------------

兩種文件的區(qū)別

--------------------------------------------------------------------------------

使用lib需注意兩個(gè)文件:

?.h頭文件,包含lib中說明輸出的類或符號(hào)原型或數(shù)據(jù)結(jié)構(gòu)。應(yīng)用程序調(diào)用lib時(shí),需要將該文件包含入應(yīng)用程序的源文件中。
?.LIB文件。

使用dll需注意三個(gè)文件:

?.h頭文件,包含dll中說明輸出的類或符號(hào)原型或數(shù)據(jù)結(jié)構(gòu)的.h文件。應(yīng)用程序調(diào)用dll時(shí),需要將該文件包含入應(yīng)用程序的源文件中。
?.LIB文件,是dll在編譯、鏈接成功之后生成的文件,作用是當(dāng)其他應(yīng)用程序調(diào)用dll時(shí),需要將該文件引入應(yīng)用程序,否則產(chǎn)生錯(cuò)誤(如果不想用lib文件或者沒有l(wèi)ib文件,可以用WIN32 API函數(shù)LoadLibrary、GetProcAddress裝載)。
?dll文件,真正的可執(zhí)行文件,開發(fā)成功后的應(yīng)用程序在發(fā)布時(shí),只需要有.exe文件和.dll文件,并不需要.lib文件和.h頭文件。

--------------------------------------------------------------------------------

生成和使用方法

--------------------------------------------------------------------------------

操作系統(tǒng):WIN7

開發(fā)軟件:VS2010

--------------------------------------------------------------------------------

1.生成lib文件

  首先,我們先建立一個(gè)控制臺(tái)工程(新建->工程->控制臺(tái)程序),添加add.cpp以及add.h文件。

復(fù)制代碼 代碼如下:

//sub.h
#ifndef _SUB_H
#define _SUB_H
void sub(int a,int b);
#endif

//sub.cpp
#include "sub.h"
#include

void sub(int a,int b)
{
std::cout<<(a-b)<<:endl>};

  由于在工程中,沒有main()函數(shù),所以直接編譯出錯(cuò)。這時(shí),要右鍵點(diǎn)擊工程,并選擇工程屬性,出現(xiàn)下圖,選擇靜態(tài)鏈接庫(kù)即可。

  這時(shí)候再按F7,build solution即可產(chǎn)生lib文件。在Debug中只生成.lib文件。

2.生成dll文件

  生成dll文件的過程與上面的過程是一樣的,只是在選擇Dynamic Library(.dll)即可。在Debug中會(huì)生成一個(gè).lib和.dll兩種文件。

--------------------------------------------------------------------------------

3.兩種文件的使用

  在使用時(shí),靜態(tài)鏈接庫(kù)只要把.h和.lib文件加入到工程文件夾中即可。而動(dòng)態(tài)鏈接庫(kù)要把.h、.lib和.dll文件加入到工程中。

復(fù)制代碼 代碼如下:

#include
#include "sub.h" //鏈接庫(kù)的頭文件
using namespaces std;

#pragma comment(lib,"sub.lib") //加入鏈接庫(kù)

int main()
{
sub(5,4);
return 0;
}


4.僅有.dll文件時(shí)候的使用方法

  在沒有.h和.lib文件時(shí),需要函數(shù)指針和WIN32 API函數(shù)LoadLibrary、GetProcAddress裝載,只需要.dll文件即可(將.dll文件置入工程目錄中)。

復(fù)制代碼 代碼如下:

#include
#include //使用函數(shù)和某些特殊變量
typedef void (*DLLFunc)(int,int); //確定調(diào)用函數(shù)的形參
int main()
{
DLLFunc dllFunc;
HINSTANCE hInstLibrary = LoadLibrary("sub.dll");//加載.dll

if (hInstLibrary == NULL)
{
FreeLibrary(hInstLibrary);
}
dllFunc = (DLLFunc)GetProcAddress(hInstLibrary, "sub");//第二個(gè)參數(shù)為要調(diào)用的函數(shù)名稱
if (dllFunc == NULL)
{
FreeLibrary(hInstLibrary);
}
dllFunc(5,4);
FreeLibrary(hInstLibrary);
return(1);
}


  最近一直在搞API這東西,用了curl、tinyxml和jsoncpp幾種開源的庫(kù),在linux下使用倒是很方便,在windows下還是自己編譯的遇到了點(diǎn)問題,從新整理學(xué)習(xí)下,備用~~更多精彩內(nèi)容,盡在https://js.Vevb.com。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 达孜县| 宝鸡市| 涿州市| 鄂温| 綦江县| 仲巴县| 西充县| 资溪县| 苏尼特左旗| 汤阴县| 池州市| 莱西市| 绥江县| 桦甸市| 德江县| 邳州市| 石首市| 陈巴尔虎旗| 鄂伦春自治旗| 安多县| 甘泉县| 晴隆县| 罗江县| 习水县| 渝中区| 阿瓦提县| 丰县| 汉阴县| 道孚县| 铁岭县| 白玉县| 壶关县| 宁南县| 旌德县| 云和县| 苗栗市| 洮南市| 元氏县| 河西区| 左贡县| 庐江县|