背景
一個函數想要調用另一個函數
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() // 調用被調用的函
}
靜態庫&動態庫&導入庫參考資料