源文件(cpp)、靜態庫(lib)、動態庫(dll)


背景

一個函數想要調用另一個函數

1、同個文件

最簡單的辦法就是調用的函數和被調用的函數寫在同個文件中

void CalledFunction()  // 被調用的函數
{
    ...
}

void CallFunction()    // 調用的函數
{
    CalledFunction()   // 調用被調用的函數
}

2、源文件

把被調用的函數寫在另外一個文件

頭文件(被調用函數的聲明)源文件(被調用函數的定義)

// Called.h 頭文件
void CalledFunction(); // 被調用的函數的聲明

// Called.cpp 源文件
void CalledFunction()  // 被調用的函數的定義
{
    ...
}

// Call.cpp 調用文件
#include "Called.h" // 引入頭文件
void CallFunction()    // 調用的函數
{
    CalledFunction()   // 調用被調用的函數
}

3、靜態庫

把源文件編譯成靜態文件,隱藏代碼細節

兩件套:頭文件、靜態庫

// Called.h 頭文件
void CalledFunction(); // 被調用的函數的聲明

// Called.cpp 源文件 編譯成 導入庫 Called.lib
void CalledFunction()  // 被調用的函數的定義
{
    ...
}

// Call.cpp 調用文件
#include "Called.h"    // 引入頭文件
#pragma comment(lib, "Called.lib")   //鏈接靜態庫
void CallFunction()    // 調用的函數
{
    CalledFunction()   // 調用被調用的函數
}

4、動態庫

把源文件編譯成導入庫和動態文件,軟件運行時再加載進來

三件套:頭文件、導入庫、動態庫

// Called.h 頭文件
#ifdef DLLProvider
#define DLL_EXPORT_IMPORT __declspec(dllexport) //表示對外導出功能
#else
#define DLL_EXPORT_IMPORT __declspec(dllimport) //表示向內導入功能
#endif
DLL_EXPORT_IMPORT void CalledFunction(); // 被調用的函數的聲明

// Called.cpp 源文件
// 編譯成:導入庫Called.lib和動態庫Called.dll
// 導入庫比靜態庫小很多,軟件運行的時候,再導入動態庫
#define DLLProvider // 聲明對外導出
#include "Called.h" // 引入頭文件
void CalledFunction()  // 被調用的函數的定義
{
...
}

// Call.cpp 調用文件
#include "Called.h"    // 引入頭文件
#pragma comment(lib, "Called.lib")   //鏈接導入庫
void CallFunction()    // 調用的函數
{
CalledFunction()   // 調用被調用的函
}

靜態庫&動態庫&導入庫參考資料

https://www.cnblogs.com/kirito1/p/12291060.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM