最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年01月30日 21:43:23   投稿:mdxy-dxy  
這篇文章主要介紹了VS2010中l(wèi)ib與dll文件的生成與使用方法,需要的朋友可以參考下

一、 lib文件的簡介

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

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

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

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

2、c++文件testDetect.cpp

內(nèi)容如下:_declspec(dllexport) 一定要加在函數(shù)聲明和定義前面,否則在生成.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、設(shè)置

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

相關(guān)文章

  • 圖文詳解C#中的協(xié)變與逆變

    圖文詳解C#中的協(xié)變與逆變

    “協(xié)變”是指能夠使用與原始指定的派生類型相比,派生程度更大的類型,“逆變”則是指能夠使用派生程度更小的類型,這篇文章主要給大家介紹了關(guān)于C#中協(xié)變與逆變的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • C# Web應(yīng)用調(diào)試開啟外部訪問步驟解析

    C# Web應(yīng)用調(diào)試開啟外部訪問步驟解析

    本文主要介紹了C# Web應(yīng)用調(diào)試開啟外部訪問的實現(xiàn)過程與方法。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • C#中4種深拷貝方法介紹

    C#中4種深拷貝方法介紹

    這篇文章主要介紹了C#中4種深拷貝方法介紹,本文講解了利用反射實現(xiàn)、利用xml序列化和反序列化實現(xiàn)、利用二進制序列化和反序列化實現(xiàn)、利用silverlight DataContractSerializer實現(xiàn),用于在silverlight 客戶端使用等4種方法,需要的朋友可以參考下
    2015-06-06
  • 深入分析WPF客戶端讀取高清圖片卡以及縮略圖的解決方法詳解

    深入分析WPF客戶端讀取高清圖片卡以及縮略圖的解決方法詳解

    本篇文章是對WPF客戶端讀取高清圖片卡以及縮略圖的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 在.NET框架使用C#實現(xiàn)PDF文件轉(zhuǎn)為HTML格式的步驟

    在.NET框架使用C#實現(xiàn)PDF文件轉(zhuǎn)為HTML格式的步驟

    HTML作為一種開放標準的網(wǎng)頁標記語言,具有跨平臺、易于瀏覽和搜索引擎友好的特性,通過將PDF文件轉(zhuǎn)換為HTML格式,我們可以更方便地在瀏覽器中展示PDF文檔內(nèi)容,本文將介紹如何在.NET框架使用C#將PDF文件轉(zhuǎn)換為HTML格式,需要的朋友可以參考下
    2025-01-01
  • C#如何利用結(jié)構(gòu)體對固定格式數(shù)據(jù)進行解析

    C#如何利用結(jié)構(gòu)體對固定格式數(shù)據(jù)進行解析

    這篇文章主要為大家詳細介紹了C#利用結(jié)構(gòu)體對固定格式數(shù)據(jù)進行解析,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C#枚舉類型與位域枚舉Enum

    C#枚舉類型與位域枚舉Enum

    這篇文章介紹了C#中的枚舉類型與位域枚舉Enum,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 解析OpenXml?Pptx的邊框虛線轉(zhuǎn)為WPF的邊框虛線問題

    解析OpenXml?Pptx的邊框虛線轉(zhuǎn)為WPF的邊框虛線問題

    這篇文章主要介紹了OpenXml?Pptx的邊框虛線轉(zhuǎn)為WPF的邊框虛線,在文中用PPTX的7種直線,分別設(shè)置7種能夠設(shè)置的虛線類型,具體實例代碼跟隨小編一起看看吧
    2021-12-12
  • C#集合Collections購物車Shopping Cart(實例講解)

    C#集合Collections購物車Shopping Cart(實例講解)

    下面小編就為大家分享一篇C#集合Collections購物車Shopping Cart的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • C#給Word不同頁面設(shè)置不同背景

    C#給Word不同頁面設(shè)置不同背景

    這篇文章主要介紹了C#給Word不同頁面設(shè)置不同背景,文章圖文講解的很清晰,有對于這方面不懂得同學(xué)可以學(xué)習(xí)下
    2021-02-02

最新評論

美姑县| 微山县| 宣恩县| 临夏县| 吉安市| 盐亭县| 太湖县| 姜堰市| 桐梓县| 夏邑县| 玉屏| 二连浩特市| 宁津县| 台安县| 望谟县| 苍南县| 玉屏| 房山区| 洪江市| 通山县| 连平县| 广汉市| 嘉峪关市| 阿荣旗| 藁城市| 扎赉特旗| 东山县| 屯留县| 广灵县| 镇巴县| 平果县| 长丰县| 滦南县| 景泰县| 高州市| 准格尔旗| 如东县| 新兴县| 厦门市| 清新县| 屏边|