国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - C# - VS2010中l(wèi)ib與dll文件的生成與使用方法

VS2010中l(wèi)ib與dll文件的生成與使用方法

2022-02-19 15:46C#教程網(wǎng) C#

這篇文章主要介紹了VS2010中l(wèi)ib與dll文件的生成與使用方法,需要的朋友可以參考下

一、 lib文件的簡(jiǎn)介

.lib是一種文件后綴,是Windows操作系統(tǒng)的庫(kù)文件,有靜態(tài)lib和動(dòng)態(tài)lib之分:

1)、靜態(tài)lib文件:將導(dǎo)出的文件的聲明和實(shí)現(xiàn)都放在lib文件中,此時(shí)lib文件主要包含函數(shù)的實(shí)現(xiàn)部分(cpp文件),例如類的函數(shù)定義。使用時(shí)只需配合相關(guān)的頭文件,編譯后程序?qū)ib文件中的代碼嵌入到宿主程序中,也就是最后的exe文件中,此時(shí)移除lib文件,程序可以正常運(yùn)行,即編譯后就不需要lib文件的支持了。

2)、動(dòng)態(tài)lib文件:相當(dāng)于是一個(gè)h頭文件,用于支持相應(yīng)的dll文件的運(yùn)行。里面存儲(chǔ)的是dll文件中各個(gè)導(dǎo)出函數(shù)的地址,達(dá)到鏈接主程序與dll文件的目的。

二、dll文件的生成

vs2010生成dll文件,生成dll文件的時(shí)候需要對(duì)應(yīng)的lib文件才能使用,dll生成方法如下(此處只是生成部分,在使用時(shí)還需修改):

1) 新建工程,選擇“win32項(xiàng)目”,注意不是“win32控制臺(tái)項(xiàng)目”,下一步選擇生成dll文件,其余默認(rèn);

2) 添加需要封裝的.cpp文件,并加入對(duì)應(yīng)的.h文件,先說(shuō)明類的封裝(也就是類的cpp文件)

頭文件.h

?
1
2
3
4
5
class __declspec(dllexport) NB (類的頭文件中只需修改此處即可)
{
public
private
}

其中關(guān)鍵字dllexport說(shuō)明該類的實(shí)現(xiàn)部分需要導(dǎo)出。

源文件.cpp

添加一句#include "stdafx.h"即可 

再說(shuō)明一下一般函數(shù)的封裝

將函數(shù)的定義改為extern  "C"  __declspec(dllexport)  float add(float  a, float  b);

extern  "C"  __declspec(dllexport)  float MIN(float a,float b);

float MAX(float a,float b);

函數(shù)MAX為導(dǎo)出到dll文件中,因此相當(dāng)于不可見(jiàn)。

 注意:若發(fā)現(xiàn)只生成了dll文件,而沒(méi)有對(duì)應(yīng)的lib文件,需要將cpp文件中的函數(shù)實(shí)體放到與工程同名的cpp文件下,并將原來(lái)的cpp文件刪除,重新rebuild all即可。

 3)編譯,在debug目錄下會(huì)生成對(duì)應(yīng)的 .lib 和 .dll文件。

dll文件的使用

dll文件的使用分為動(dòng)態(tài)加載和靜態(tài)加載,兩種方法優(yōu)勢(shì)都很明顯:

動(dòng)態(tài)加載:在程序中用程序顯示加載dll文件,通過(guò)函數(shù)GetProcAddress找到對(duì)應(yīng)的函數(shù)的地址,利用函數(shù)指針直接訪問(wèn)對(duì)應(yīng)的函數(shù)。該方法不需要lib文件的支持,也不需要包含對(duì)應(yīng)的頭文件,但是需要顯式的加載dll文件,這也就意味著dll文件在編譯的時(shí)候就已經(jīng)被鏈接,且使用不是很方便,函數(shù)指針容易出錯(cuò)。

靜態(tài)加載:只加載對(duì)應(yīng)的lib文件(是一些函數(shù)鏈接的信息,一般比較小),不加載dll文件,編譯的時(shí)候只需要lib文件的支持,在運(yùn)行的時(shí)候才調(diào)用dll文件的函數(shù)。此處lib文件和dll文件都放在工程目錄下,且需要包含對(duì)應(yīng)的頭文件。

Windows中dll、exe都是可執(zhí)行的文件,但是exe可以直接被操作系統(tǒng)調(diào)用執(zhí)行,而dll文件不能,因此當(dāng)有進(jìn)程調(diào)用dll文件中函數(shù)時(shí),直接即可運(yùn)行。

動(dòng)態(tài)加載過(guò)程:

1)、加載dll

2)、取函數(shù)地址

3)、釋放dll

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <Windows.h>     // 包含 HINSTANCE
#include <iostream>
using namespace std;
 
int main()
{
HINSTANCE his = LoadLibraryA("to_test1.dll");//用于加載dll
 
typedef float(*Add)(float a,float b);
Add add1 = (Add)GetProcAddress(his,"add");//GetProcAddress()用于獲得函數(shù)地址
 
typedef float(*Min)(float a,float b);
Min add2 = (Min)GetProcAddress(his,"MIN");
cout<<add1(2,3)<<endl;
cout<<add2(2,3)<<endl;
 
FreeLibrary(his);//釋放dll
return 0;
}

 靜態(tài)加載過(guò)程:

1)、加載lib文件:

法一:預(yù)編譯命令#pragma comment(lib,"JsPlayer.lib")

法二:通過(guò)資源文件加入lib文件

法三:工程屬性——鏈接器——輸入——附加依賴項(xiàng)

2)、包含頭文件

3)、dll文件中的函數(shù)對(duì)于程序可見(jiàn)

?
1
2
3
4
5
6
7
#include"func_add_min.h"
int main()
{
cout<<add(1,2)<<endl;
cout<<MIN(1,2)<<endl;
return 0;
}

注意:如果是類的封裝,頭文件需要做簡(jiǎn)單的修改

?
1
2
3
4
5
class __declspec(dllexport) NB
{
public
private
}

lib文件與dll

  (1)lib是編譯時(shí)需要的,dll是運(yùn)行時(shí)需要的。

  如果要完成源代碼的編譯,有l(wèi)ib就夠了。

  如果也使動(dòng)態(tài)連接的程序運(yùn)行起來(lái),有dll就夠了。

  在開(kāi)發(fā)和調(diào)試階段,當(dāng)然最好都有。

  (2)一般的動(dòng)態(tài)庫(kù)程序有l(wèi)ib文件和dll文件。lib文件是必須在編譯期就連接到應(yīng)用程序中的,而dll文件是運(yùn)行期才會(huì)被調(diào)用的。如果有dll文件,那么對(duì)應(yīng)的lib文件一般是一些索引信息,具體的實(shí)現(xiàn)在dll文件中。如果只有l(wèi)ib文件,那么這個(gè)lib文件是靜態(tài)編譯出來(lái)的,索引和實(shí)現(xiàn)都在其中。靜態(tài)編譯的lib文件有好處:給用戶安裝時(shí)就不需要再掛動(dòng)態(tài)庫(kù)了。但也有缺點(diǎn),就是導(dǎo)致應(yīng)用程序比較大,而且失去了動(dòng)態(tài)庫(kù)的靈活性,在版本升級(jí)時(shí),同時(shí)要發(fā)布新的應(yīng)用程序才行。

  (3)在動(dòng)態(tài)庫(kù)的情況下,有兩個(gè)文件,一個(gè)是引入庫(kù)(.LIB)文件,一個(gè)是DLL文件,引入庫(kù)文件包含被DLL導(dǎo)出的函數(shù)的名稱和位置,DLL包含實(shí)際的函數(shù)和數(shù)據(jù),應(yīng)用程序使用LIB文件鏈接到所需要使用的DLL文件,庫(kù)中的函數(shù)和數(shù)據(jù)并不復(fù)制到可執(zhí)行文件中,因此在應(yīng)用程序的可執(zhí)行文件中,存放的不是被調(diào)用的函數(shù)代碼,而是DLL中所要調(diào)用的函數(shù)的內(nèi)存地址,這樣當(dāng)一個(gè)或多個(gè)應(yīng)用程序運(yùn)行是再把程序代碼和被調(diào)用的函數(shù)代碼鏈接起來(lái),從而節(jié)省了內(nèi)存資源。從上面的說(shuō)明可以看出,DLL文件必須隨應(yīng)用程序一起發(fā)行,否則應(yīng)用程序?qū)?huì)產(chǎn)生錯(cuò)誤。

加載LIB文件方法

直接加入

  在VC中打開(kāi)File View一頁(yè),選中工程名,單擊鼠標(biāo)右鍵,然后選中"Add Files to Project"菜單,在彈出的文件對(duì)話框中選中要加入DLL的LIB文件即可。

設(shè)置工程的 Project Setting

  打開(kāi)工程的 Project Settings菜單,選中Link,然后在Object/library modules下的文本框中輸入DLL的LIB文件。

通過(guò)程序代碼

  加入預(yù)編譯指令#pragma comment (lib,"*.lib"),這種方法優(yōu)點(diǎn)是可以利用條件預(yù)編譯指令鏈接不同版本的LIB文件。因?yàn)椋贒ebug方式下,產(chǎn)生的LIB文件是Debug版本,如Regd.lib;在Release方式下,產(chǎn)生的LIB文件是Release版本,如Regr.lib。

  當(dāng)應(yīng)用程序?qū)LL的LIB文件加載后,還需要把DLL對(duì)應(yīng)的頭文件(*.h)包含到其中,在這個(gè)頭文件中給出了DLL中定義的函數(shù)原型,然后聲明。

vs2010如何生成.DLL和.lib庫(kù)(SDK)

1、新建一個(gè)空項(xiàng)目.exe或者.DLL或者.lib都可以,本例子用.exe為例

新建工程--空項(xiàng)目,取名testDetect

2、c++文件testDetect.cpp

內(nèi)容如下:_declspec(dllexport) 一定要加在函數(shù)聲明和定義前面,否則在生成.dll的時(shí)候不會(huì)生成.lib(生成.dll的時(shí)候一般都會(huì)生成.lib,生成.lib的時(shí)候只有.lib)

注意:

?
1
2
3
4
5
6
#include "testDetec.h"
 
_declspec(dllexport) int testDetect(short* refPcm, int refLen, int refSamprate, int refChannel, short* micPcm, int micLen, int micSamprate, int micChannel){
int resulut=0;
return resulut;
}

c++文件testDetect.h

?
1
2
3
4
5
#ifndef _testDetect_H_
#define _testDetect_H_
_declspec(dllexport) int testDetect(short* refPcm, int refLen, int refSamprate, int refChannel, short* micPcm, int micLen, int micSamprate, int micChannel);
 
#endif

3、設(shè)置

如果想要生成.dll此時(shí)修改設(shè)置:屬性--配置屬性--常規(guī)--項(xiàng)目默認(rèn)值--配置類型(三個(gè)選擇:應(yīng)用程序.exe,動(dòng)態(tài)庫(kù).dll,靜態(tài)庫(kù).lib等)--動(dòng)態(tài)庫(kù).DLL
然后buid,再按F6就可以生成動(dòng)態(tài)庫(kù)了,在工程目錄文件夾里的Dubug下面就有testDetect.dll和testDetect.lib,給別人調(diào)用時(shí)只要將testDetec.h和testDetect.dll和testDetect.lib給別人就可以了
同理可以生成.lib庫(kù)

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩欧美国产一区二区 | 韩日中文字幕 | 中文字幕不卡在线观看 | 中文字幕高清在线观看 | 精品国产乱码久久久久久图片 | av亚洲在线 | 国产婷婷色一区二区三区 | 福利视频1000| 亚洲精品久久久久999中文字幕 | 欧美视频区 | 国产中文视频 | 久久久久综合 | 国产精品美女久久久久久久久久久 | 亚洲天堂中文字幕 | 在线a电影| 九九久久久 | 日韩在线免费观看网站 | 牛牛电影国产一区二区 | 国产精品一区二区不卡 | 国产婷婷精品av在线 | 国产午夜一区二区三区 | 天天夜操| 久久这里精品 | 久久国产精品免费一区二区三区 | а√在线中文在线新版 | 精品国产一区二区三区忘忧草 | 国产精品福利午夜在线观看 | 日本视频中文字幕 | 日本综合久久 | 色婷婷国产精品综合在线观看 | 亚洲国产成人精品女 | 黄色片视频在线观看 | 久久精品91 | 欧美一区二区三区在线观看视频 | 国产一区二区av | 91欧美激情一区二区三区成人 | 欧美另类国产 | 激情久久婷婷 | 日本一区二区视频 | 日比视频网站 | 福利视频在线播放 |