亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

VS2010中lib與dll文件的生成與使用方法

2019-10-29 21:06:38
字體:
來源:轉載
供稿:網友

一、 lib文件的簡介

.lib是一種文件后綴,是Windows操作系統的庫文件,有靜態lib和動態lib之分:
1)、靜態lib文件:將導出的文件的聲明和實現都放在lib文件中,此時lib文件主要包含函數的實現部分(cpp文件),例如類的函數定義。使用時只需配合相關的頭文件,編譯后程序將lib文件中的代碼嵌入到宿主程序中,也就是最后的exe文件中,此時移除lib文件,程序可以正常運行,即編譯后就不需要lib文件的支持了。
2)、動態lib文件:相當于是一個h頭文件,用于支持相應的dll文件的運行。里面存儲的是dll文件中各個導出函數的地址,達到鏈接主程序與dll文件的目的。
二、dll文件的生成
vs2010生成dll文件,生成dll文件的時候需要對應的lib文件才能使用,dll生成方法如下(此處只是生成部分,在使用時還需修改):
1) 新建工程,選擇“win32項目”,注意不是“win32控制臺項目”,下一步選擇生成dll文件,其余默認;
2) 添加需要封裝的.cpp文件,并加入對應的.h文件,先說明類的封裝(也就是類的cpp文件)
頭文件.h
class __declspec(dllexport) NB (類的頭文件中只需修改此處即可){public:private:}
其中關鍵字dllexport說明該類的實現部分需要導出。
源文件.cpp
添加一句#include "stdafx.h"即可 
再說明一下一般函數的封裝
將函數的定義改為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);
函數MAX為導出到dll文件中,因此相當于不可見。
 注意:若發現只生成了dll文件,而沒有對應的lib文件,需要將cpp文件中的函數實體放到與工程同名的cpp文件下,并將原來的cpp文件刪除,重新rebuild all即可。
 3)編譯,在debug目錄下會生成對應的 .lib 和 .dll文件。
dll文件的使用
dll文件的使用分為動態加載和靜態加載,兩種方法優勢都很明顯:
動態加載:在程序中用程序顯示加載dll文件,通過函數GetProcAddress找到對應的函數的地址,利用函數指針直接訪問對應的函數。該方法不需要lib文件的支持,也不需要包含對應的頭文件,但是需要顯式的加載dll文件,這也就意味著dll文件在編譯的時候就已經被鏈接,且使用不是很方便,函數指針容易出錯。
靜態加載:只加載對應的lib文件(是一些函數鏈接的信息,一般比較?。患虞ddll文件,編譯的時候只需要lib文件的支持,在運行的時候才調用dll文件的函數。此處lib文件和dll文件都放在工程目錄下,且需要包含對應的頭文件。
Windows中dll、exe都是可執行的文件,但是exe可以直接被操作系統調用執行,而dll文件不能,因此當有進程調用dll文件中函數時,直接即可運行。
動態加載過程:
1)、加載dll
2)、取函數地址
3)、釋放dll
#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()用于獲得函數地址  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);//釋放dllreturn 0;}
 靜態加載過程:
1)、加載lib文件:
法一:預編譯命令#pragma comment(lib,"JsPlayer.lib")
法二:通過資源文件加入lib文件
法三:工程屬性——鏈接器——輸入——附加依賴項
2)、包含頭文件
3)、dll文件中的函數對于程序可見
#include"func_add_min.h"int main(){cout<<add(1,2)<<endl;cout<<MIN(1,2)<<endl;return 0;}
注意:如果是類的封裝,頭文件需要做簡單的修改
class __declspec(dllexport) NB {public:private:}
lib文件與dll
  (1)lib是編譯時需要的,dll是運行時需要的。
  如果要完成源代碼的編譯,有lib就夠了。
  如果也使動態連接的程序運行起來,有dll就夠了。
  在開發和調試階段,當然最好都有。
  (2)一般的動態庫程序有lib文件和dll文件。lib文件是必須在編譯期就連接到應用程序中的,而dll文件是運行期才會被調用的。如果有dll文件,那么對應的lib文件一般是一些索引信息,具體的實現在dll文件中。如果只有lib文件,那么這個lib文件是靜態編譯出來的,索引和實現都在其中。靜態編譯的lib文件有好處:給用戶安裝時就不需要再掛動態庫了。但也有缺點,就是導致應用程序比較大,而且失去了動態庫的靈活性,在版本升級時,同時要發布新的應用程序才行。
  (3)在動態庫的情況下,有兩個文件,一個是引入庫(.LIB)文件,一個是DLL文件,引入庫文件包含被DLL導出的函數的名稱和位置,DLL包含實際的函數和數據,應用程序使用LIB文件鏈接到所需要使用的DLL文件,庫中的函數和數據并不復制到可執行文件中,因此在應用程序的可執行文件中,存放的不是被調用的函數代碼,而是DLL中所要調用的函數的內存地址,這樣當一個或多個應用程序運行是再把程序代碼和被調用的函數代碼鏈接起來,從而節省了內存資源。從上面的說明可以看出,DLL文件必須隨應用程序一起發行,否則應用程序將會產生錯誤。
加載LIB文件方法
直接加入
  在VC中打開File View一頁,選中工程名,單擊鼠標右鍵,然后選中"Add Files to Project"菜單,在彈出的文件對話框中選中要加入DLL的LIB文件即可。
設置工程的 Project Setting
  打開工程的 Project Settings菜單,選中Link,然后在Object/library modules下的文本框中輸入DLL的LIB文件。
通過程序代碼
  加入預編譯指令#pragma comment (lib,"*.lib"),這種方法優點是可以利用條件預編譯指令鏈接不同版本的LIB文件。因為,在Debug方式下,產生的LIB文件是Debug版本,如Regd.lib;在Release方式下,產生的LIB文件是Release版本,如Regr.lib。
  當應用程序對DLL的LIB文件加載后,還需要把DLL對應的頭文件(*.h)包含到其中,在這個頭文件中給出了DLL中定義的函數原型,然后聲明。

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

1、新建一個空項目.exe或者.DLL或者.lib都可以,本例子用.exe為例

新建工程--空項目,取名testDetect

2、c++文件testDetect.cpp

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

注意:

#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

#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、設置

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


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人97精品免费看片| 国产成人激情小视频| 国产精品毛片a∨一区二区三区|国| 欧美精品videosex性欧美| 日韩av一区在线观看| 欧美又大又硬又粗bbbbb| 欧美日韩一区二区在线播放| 日韩h在线观看| 啪一啪鲁一鲁2019在线视频| 日韩电视剧在线观看免费网站| 日韩精品在线观看视频| 91高清免费视频| 精品久久久久久久久久| 色yeye香蕉凹凸一区二区av| 久久成人精品一区二区三区| 最新日韩中文字幕| 国产成人精品网站| 亚洲精品白浆高清久久久久久| 91av在线看| 久久99热精品这里久久精品| 欧美日本高清视频| 蜜臀久久99精品久久久无需会员| 亚洲人成在线电影| 日韩欧美国产激情| 国产精品无av码在线观看| 亚洲999一在线观看www| 国产精品吴梦梦| 国产精品亚洲自拍| 亚洲福利在线播放| 亚洲欧美制服第一页| 亚洲天天在线日亚洲洲精| 欧美日韩中文在线| 亚洲国产一区自拍| 国产69久久精品成人| 国产精品一区二区三区久久久| 国内揄拍国内精品| 永久免费看mv网站入口亚洲| 亚洲白虎美女被爆操| 欧美成人午夜剧场免费观看| 国产精品旅馆在线| 亚洲毛片在线免费观看| 97超级碰在线看视频免费在线看| 欧美性猛交xxxx黑人| 亚洲精品动漫久久久久| 91成人国产在线观看| 激情亚洲一区二区三区四区| 国产精品日韩一区| 欧美一区二区三区免费观看| 国产精品第8页| 中文字幕欧美日韩在线| 日韩精品视频免费专区在线播放| 日韩成人av网| 日韩精品视频三区| 久久电影一区二区| 久久久久国产精品一区| 成人h视频在线观看播放| 久久精品小视频| 青青精品视频播放| 97超碰色婷婷| 日韩一区视频在线| 中国china体内裑精亚洲片| 亚洲欧美日韩精品| 欧美激情精品久久久久久| 欧美成人免费网| 亚洲第一区中文99精品| 亚洲精品小视频在线观看| 国产亚洲成精品久久| 国产精品高潮呻吟久久av无限| 国产欧美va欧美va香蕉在| 亚洲区一区二区| 久久综合九色九九| 国产精品男女猛烈高潮激情| 欧美日韩在线免费| 国产精品大片wwwwww| 91麻豆国产精品| 日韩欧美主播在线| 51色欧美片视频在线观看| 亚洲国产精品专区久久| 欧美激情影音先锋| 韩剧1988在线观看免费完整版| 亚洲精品欧美日韩| 久久久精品在线观看| 国产精品羞羞答答| 清纯唯美亚洲综合| 中文字幕日韩在线观看| 日韩国产一区三区| 国产精品99久久久久久www| 国产精品v片在线观看不卡| 成人写真福利网| xxxxxxxxx欧美| 日韩欧美在线视频日韩欧美在线视频| 欧美精品一区二区三区国产精品| 欧美极品少妇全裸体| 亚洲男人第一av网站| 精品中文字幕乱| 国产成人aa精品一区在线播放| 欧美丰满少妇xxxx| 久久久成人av| 影音先锋欧美在线资源| 亚洲丝袜一区在线| 热久久免费国产视频| 亚洲一区二区中文字幕| 亚洲www视频| 欧美日韩福利视频| 国产精品一区二区三区久久| 亚洲欧美www| 欧美性69xxxx肥| 亚洲精品美女久久久久| 亚洲第一网站男人都懂| 毛片精品免费在线观看| 日本国产欧美一区二区三区| 91产国在线观看动作片喷水| 91在线观看免费高清完整版在线观看| 亚洲欧美成人在线| 狠狠躁夜夜躁人人躁婷婷91| 精品香蕉一区二区三区| 国产欧美久久久久久| 亚洲电影天堂av| 亚洲一区二区久久久| 91精品综合视频| 亚洲国产精品小视频| 久久国产精品免费视频| 欧美色图在线视频| 97精品国产aⅴ7777| 国内精品久久久久久中文字幕| y97精品国产97久久久久久| 精品国产区一区二区三区在线观看| 一区二区福利视频| 992tv成人免费视频| 欧美成人sm免费视频| 久久久www成人免费精品| 日韩中文字幕第一页| 欧美在线视频观看| 欧美自拍大量在线观看| 中文字幕亚洲欧美日韩高清| 欧美成人精品不卡视频在线观看| 亚洲自拍偷拍福利| 精品久久久av| 91在线观看欧美日韩| 一区二区三区www| 国产精品丝袜一区二区三区| 亚洲欧美日韩天堂一区二区| 欧美在线视频播放| 国产日韩精品入口| 国产亚洲精品成人av久久ww| 欧美电影在线播放| 日韩av电影在线免费播放| 欧美最顶级的aⅴ艳星| 成人黄色av网站| 国产偷国产偷亚洲清高网站| 精品久久久久久亚洲国产300| 久久久之久亚州精品露出| 国产成人极品视频| 亚洲人成网站999久久久综合| 国产97在线播放| 欧美性猛交xxxx免费看漫画| 亚洲精品视频在线播放| 亚洲欧美www| 国产一区二区三区网站| 欧洲成人在线视频| 美日韩精品免费视频| 精品久久久一区| 亚洲国产精品99| 亚洲成色777777女色窝|