日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

c++中.dll与.lib文件的生成与使用的详解

發(fā)布時(shí)間:2023/12/18 c/c++ 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++中.dll与.lib文件的生成与使用的详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

c++中.dll與.lib文件的生成與使用的詳解

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

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

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

?.h頭文件,包含dll中說(shuō)明輸出的類或符號(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 <iostream>

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

?

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

?

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

2.生成dll文件

  生成dll文件的過(guò)程與上面的過(guò)程是一樣的,只是在選擇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 <iostream>
#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 <iostream>
#include <windows.h>?????????????? //使用函數(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);
}

?

靜態(tài)調(diào)用dll

在新文件yyy.cpp里加入如下內(nèi)容;
#include "xxx.h"
#pragma comment(lib,"xxx.dll")

生成的dll,不包含xxx.h的話,需要把h文件內(nèi)的函數(shù)原型聲明添加進(jìn)yyy.cpp

編譯時(shí)需要加入dll,類似這樣:
g++ -L. -o yyy.exe yyy.cpp xxx.dll

3)動(dòng)態(tài)調(diào)用dll

首先,你需要包含windows.h
#include <windows.h>

你還需要一個(gè)句柄保存裝入的dll文件
HINSTANCE hDll=LoadLibrary("xxx.dll");

聲明所需函數(shù)的對(duì)應(yīng)函數(shù)指針類型
typedef void (*pfunc)(void);

獲得指向函數(shù)的函數(shù)指針
pfunc pf=(pfunc*)GetProcAddress(hDll,"example");

使用完畢后,要釋放dll文件
FreeLibrary(hDll);

總結(jié)

以上是生活随笔為你收集整理的c++中.dll与.lib文件的生成与使用的详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久精品国产免费 | 亚洲天堂一区二区在线 | 中文字幕在线视频日韩 | 午夜视频在线观看一区二区 | 国产精品二区在线 | 国产婷婷在线视频 | 痴女扩张宫交脱垂重口小说 | av一卡二卡| 综合色综合 | 熟女人妇 成熟妇女系列视频 | 欧美日韩三级视频 | 波多野结衣免费视频观看 | 日本精品在线观看 | 国产精品午夜福利视频234区 | 老外黄色一级片 | 少妇特黄a一区二区三区 | 乱子伦一区二区 | 91桃色视频在线观看 | 凹凸av在线 | 亚洲免费区 | 日本在线一区二区三区 | 我把护士日出水了视频90分钟 | 超碰青娱乐 | 色妞色| av在线影片| 国产午夜电影 | 日韩毛片视频 | 无码h黄肉3d动漫在线观看 | 久久久久国产精品无码免费看 | 亚洲AV无码成人精品区先锋 | 伊人网综合视频 | 国产av日韩一区二区三区精品 | 2019最新中文字幕 | 蜜桃成人在线观看 | 国产精品毛片va一区二区三区 | 免费黄色在线看 | 九草视频在线 | 天堂成人在线观看 | 日韩欧美亚洲一区二区三区 | 蜜桃av色偷偷av老熟女 | 丰满大乳国产精品 | 黄色av高清 | 亚洲综合一区二区 | 精品日日夜夜 | 天天干夜夜玩 | 在线免费观看网站入口在哪 | 日韩成人在线一区 | 毛片在线免费视频 | 欧美国产第一页 | 最近中文字幕av | 天堂久久网| 亚洲天堂成人av | 日韩经典一区二区三区 | 国精产品一区一区三区视频 | 国产成人av一区二区三区在线观看 | 刘玥91精选国产在线观看 | 免费日本特黄 | 久久久久久久女国产乱让韩 | 国产黄色在线观看 | 亚洲精品高清在线观看 | 天天射天天色天天干 | 国产清纯白嫩初高中在线观看性色 | 精品国产高清在线观看 | www.蜜桃av | 亚洲 成人 av | 男人的天堂aa | 美女网站视频在线观看 | 亚洲永久免费 | 玩弄人妻少妇500系列 | 国内自拍网站 | 久久久久亚洲av片无码下载蜜桃 | 97超碰在线免费 | 成人免费视频一区二区三区 | 女人一区二区 | 黄三级| 51ⅴ精品国产91久久久久久 | 精品无码久久久久久久久果冻 | 国产高清在线观看 | 免费成人美女女 | 日韩av中文字幕在线播放 | 特级性生活片 | 国产cao| 中文字幕乱码一区二区三区 | 国产91视频播放 | 欧美日韩69| 伊人激情综合网 | 久久黄色免费视频 | 1区2区视频| 在线播放无码后入内射少妇 | 一区二区黄色 | 久久国产精品一区 | 91亚洲免费| 婷婷色av | 一区两区小视频 | 日本熟妇人妻中出 | 婷婷久久网 | 无码人妻精品一区二区 | 另类专区成人 | 中文字幕在线欧美 |