動態鏈結庫示例 Win7 VS2010

2021-08-22 02:18:30 字數 2586 閱讀 7351

作業系統: win7 ;ide: vs2010 express(學習版)

1.1 建立解決方案mydll_demo,空專案mydll;

1.2 設定mydll專案屬性的配置型別為」動態庫(.dll)」(配置屬性->常規->配置型別);

1.3 向mydll專案中新增檔案mydll.h,mydll.c,檔案內容如下:

mydll.h

#ifndef mydll_h_

#define mydll_h_

#ifdef mydll_export

#define mydll_api __declspec(dllexport)

#else

#define mydll_api __declspec(dllimport)

#endif

#ifdef __cplusplus

extern

"c"

#endif

#endif

mydll.c

#include "mydll.h"

mydll_api double add(double param1, double param2)

1.4 設定mydll專案預定義巨集(配置屬性->c/c++->預處理器->預處理器定義)

1.5 編譯生成mydll.lib、mydll.dll(預設解決方案debug目錄)

備註:mydll.h編譯巨集的設定參考googletest -> gtest-port.h

// gtest_api_ qualifies all symbols that must be exported. the definitions below

// are guarded by #ifndef to give embedders a chance to define gtest_api_ in

// gtest/internal/custom/gtest-port.h

#ifndef gtest_api_

#ifdef _msc_ver

# if gtest_linked_as_shared_library

# define gtest_api_ __declspec(dllimport)

# elif gtest_create_shared_library

# define gtest_api_ __declspec(dllexport)

# endif

#elif __gnuc__ >= 4 || defined(__clang__)

# define gtest_api_ __attribute__((visibility ("default")))

#endif // _msc_ver

#endif // gtest_api_

#ifndef gtest_api_

# define gtest_api_

#endif // gtest_api_

2.1 向解決方案mydll_demo新增空的控制台(console)專案mydll_test

2.2 設定mydll_test專案屬性

2.2.1 vc++ 目錄->包含目錄為mydll.h所在路徑;

2.2.2 vc++ 目錄->庫目錄為mydll.lib所在路徑;

2.2.3 鏈結器->輸入->附加依賴項為mydll.lib;

2.3 向mydll_test專案新增原始檔source.cpp,檔案內容如下:

#include "mydll.h"

#include

int main(void)

2.4 編譯生成mdll_test.exe,雙擊執行;

注意:如果提示丟失mydll.dll檔案,將mydll.dll拷貝到mdll_test.exe檔案所在目錄。

[1] declspec(dllexport)和declspec(dllimport) 的使用說明

[2] windows c++中__declspec(dllexport)的使用

[3] vs2013下靜態鏈結庫(lib)和動態鏈結庫(dll)的生成與使用

[4] vs2010下靜態鏈結庫和動態鏈結庫的生成和使用

VS2015 動態鏈結庫 靜態鏈結庫

首先介紹一下靜態庫 靜態鏈結庫 動態庫 動態鏈結庫 的概念,首先兩者都是 共享的方式。靜態庫 在鏈結步驟中,聯結器將從庫檔案取得所需的 複製到生成的可執行檔案中,這種庫稱為靜態庫,其特點是可執行檔案中包含了庫 的乙份完整拷貝 缺點就是被多次使用就會有多份冗餘拷貝。即靜態庫中的指令都全部被直接包含在最...

live555原始碼編譯(win7 vs2010)

環境 windows7 vs2010 2 更改配置檔案 解壓後進入live資料夾,去掉檔案win32config的唯讀屬性,編輯該檔案。將tools32更改為 tools32 c program files microsoft visual studio 10.0 vc 將link opts 0選項...

MFC動態鏈結庫和WIN32動態鏈結庫

1 dll的構成 每個應用程式都有乙個入口函式winmain,而每個dll也有乙個入口函式dllmain。dll跟應用程式一樣都含有資源 資料段和 段。dll跟應用程式的差別主要是dll有符號輸入表和符號輸出表,以方便應用程式呼叫dll中的函式。因為dll是由應用程式載入的,所以它本身沒有虛擬的記憶...