c++中.dll與.lib檔案的產生與使用的詳解_C 語言

來源:互聯網
上載者:User

c++中.dll與.lib檔案的產生與使用的詳解

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

兩種庫:

•  包含了函數所在的DLL檔案和檔案中函數位置的資訊(入口),代碼由運行時載入在進程空間中的DLL提供,稱為動態連結程式庫dynamic link library。
•  包含函數代碼本身,在編譯時間直接將代碼加入程式當中,稱為靜態連結庫static link library。
共有兩種連結方式:

•  動態連結使用動態連結程式庫,允許可執行模組(.dll檔案或.exe檔案)僅包含在運行時定位DLL函數的可執行代碼所需的資訊。
•  靜態連結使用靜態連結庫,連結器從靜態連結庫LIB擷取所有被引用函數,並將庫同代碼一起放到可執行檔中。

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

兩種檔案的區別

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

使用lib需注意兩個檔案:

•.h標頭檔,包含lib中說明輸出的類或符號原型或資料結構。應用程式調用lib時,需要將該檔案包含入應用程式的源檔案中。
•.LIB檔案。

使用dll需注意三個檔案:

•.h標頭檔,包含dll中說明輸出的類或符號原型或資料結構的.h檔案。應用程式調用dll時,需要將該檔案包含入應用程式的源檔案中。
•.LIB檔案,是dll在編譯、連結成功之後產生的檔案,作用是當其他應用程式調用dll時,需要將該檔案引入應用程式,否則產生錯誤(如果不想用lib檔案或者沒有lib檔案,可以用WIN32 API函數LoadLibrary、GetProcAddress裝載)。
•dll檔案,真正的可執行檔,開發成功後的應用程式在發布時,只需要有.exe檔案和.dll檔案,並不需要.lib檔案和.h標頭檔。

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

產生和使用方法

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

作業系統:WIN7

開發軟體:VS2010

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

1.產生lib檔案

  首先,我們先建立一個控制台工程(建立->工程->控制台程式),添加add.cpp以及add.h檔案。

複製代碼 代碼如下:

//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()函數,所以直接編譯出錯。這時,要右鍵點擊工程,並選擇工程屬性,出現下圖,選擇靜態連結庫即可。

  這時候再按F7,build solution即可產生lib檔案。在Debug中只產生.lib檔案。

2.產生dll檔案

  產生dll檔案的過程與上面的過程是一樣的,只是在選擇Dynamic Library(.dll)即可。在Debug中會產生一個.lib和.dll兩種檔案。

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

3.兩種檔案的使用

  在使用時,靜態連結庫只要把.h和.lib檔案加入到工程檔案夾中即可。而動態連結程式庫要把.h、.lib和.dll檔案加入到工程中。

複製代碼 代碼如下:

#include <iostream>
#include "sub.h"  //連結庫的標頭檔
using namespaces std;

#pragma comment(lib,"sub.lib") //加入連結庫

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


4.僅有.dll檔案時候的使用方法

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

複製代碼 代碼如下:

#include <iostream>
#include <windows.h>               //使用函數和某些特殊變數
typedef void (*DLLFunc)(int,int);  //確定調用函數的形參
int main()
{
    DLLFunc dllFunc;
    HINSTANCE hInstLibrary = LoadLibrary("sub.dll");//載入.dll

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


   最近一直在搞API這東西,用了curl、tinyxml和jsoncpp幾種開源的庫,在linux下使用倒是很方便,在windows下還是自己編譯的遇到了點問題,從新整理學習下,備用~~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.