C 學習筆記 動態庫與靜態庫

2021-08-25 17:10:58 字數 3408 閱讀 2175

stdafx.h

targetver.h

dllmain.cpp

libraryexercise.cpp //工程名

stdafx.cpp

// libraryexercise.cpp : 定義 dll 應用程式的匯出函式。

#include "stdafx.h"

_declspec(dllexport) int add(int a, int b)

#include //使用庫

#pragma comment(lib,"add.lib")

//宣告:此函式需從dll匯入

#define mydll _declspec(dllexport) //在編譯dll工程的.cpp檔案裡,定義巨集mydll_export

#else

#define mydll _declspec(dllimport) //在使用者工程的.cpp檔案裡,什麼都不用定義就行了

#endif

#include mydll int add (int a, int b);

#endif

#define mydll_export //預編譯規定「輸出選項」,用作編譯dll工程裡的cpp檔案

#include int add(int a, int b)

#include #include //此處不需任何其他巨集定義,h檔案中mydll自動被編譯為_declspec(import)

#pragma comment(lib, "mydll.lib")

int main(int argc, char** argv)

#include //c++中尖括號表示系統檔案,雙引號表示使用者自己的標頭檔案
在此檔案中儲存類的定義

#ifndef _my_class_dll_h

#define _my_class_dll_h

#ifdef mydll_export

#define mydll _declspec(dllexport)

#else

#define mydll _declspec(dllimport)

#endif

class mydll myobj //整個類的匯出和匯入只需此處用到mydll

#endif

#include #define mydll_export

#include "myclassdll.h"

//在cpp中定義的成員函式無需再使用關鍵字mydll匯出

myobj:: myobj(int v)

:value(v)

void myobj:: diplay()

目標工程cpp

//包含標頭檔案和lib後直接實用類建立物件

#include #include "myclassdll.h"

#pragma comment(lib, "myclassdll.lib")

int main(int argc, char** argv)

// mylib.h 靜態庫h檔案

#ifndef _mylib_h_

#define _mylib_h_

int add(int a, int b);

#endif

靜態庫cpp檔案

#include "mylib.h"

int add(int a, int b)

#include #include "mylib.h"

#pragma comment(lib, "mylib")

int main(int argc, char** argv)

#ifndef _mydll_h_

#define _mydll_h_

#include #ifdef mydll_export

#define mydll _declspec(dllexport)

#else

#define mydll _declspec(dllimport)

#endif

extern "c" mydll int add(int a, int b); //將函式宣告為乙個c函式

#endif

#include "mydll.h"

int add(int a, int b)

#include //包含windows相關標頭檔案

#include #include int main(int argc, char** argv)

}freelibrary(handle);

}

靜態庫 動態庫學習筆記

靜態庫 動態庫學習筆記 庫 是一種可執行 的二進位制形式,可被作業系統載入記憶體執行 是寫好的 現有的 完善的可複製的 庫可分為靜態庫 a或.lib 和動態庫 so或.dll 動靜之分是因為鏈結階段對庫的處理不一樣導致。程式編譯成可執行檔案的過程 預處理 編譯 彙編 鏈結 可執行檔案。靜態庫 在鏈結...

C 靜態庫與動態庫

感覺比較形象,就摘過來了.這次分享的 宗旨是 讓大家學會建立與使用靜態庫 動態庫,知道靜態庫與動態庫的區別,知道使用的時候如何選擇。這裡不深入介紹靜態庫 動態庫的底層格式,記憶體布局等,有興趣的同學,推薦一本書 程式設計師的自我修養 鏈結 裝載與庫 庫是寫好的現有的,成熟的,可以復用的 現實中每個程...

C 靜態庫與動態庫

庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll 所謂靜態 動態是指鏈結。回顧一下,將乙個程...