日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VS C++生成dll和静态调用dll的方法

發布時間:2025/3/15 c/c++ 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VS C++生成dll和静态调用dll的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、動態鏈接庫(dll)概述

在實際編程中,我們可以把完成某項功能的函數放在一個動態鏈接庫里,然后提供給其他程序調用。

1.1 靜態庫和動態庫

靜態庫:
函數和數據被編譯進一個二進制文件(擴展名通常為.lib),在使用靜態庫的情況下,在編譯鏈接可執行文件時,鏈接器從靜態庫中復制這些函數和數據,并把它們和應用程序的其他模塊組合起來創建最終的可執行文件(.exe)。當發布產品時,只需要發布這個可執行文件,并不需要發布被使用的靜態庫。

動態庫:
在使用動態庫時,往往提供兩個文件:一個引入庫(.lib,非必須)和一個.dll文件。這里的引入庫和靜態庫文件雖然擴展名都是.lib,但是有著本質上的區別,對于一個動態鏈接庫來說,其引入庫文件包含該動態庫導出的函數和變量的符號名,而.dll文件包含該動態庫實際的函數和數據。

1.2 使用動態鏈接庫的好處

1. 可以使用多種編程語言編寫:

比如我們可以用VC++編寫dll,然后在VB編寫的程序中調用它。

2. 增強產品功能:

可以通過開發新的dll取代產品原有的dll,達到增強產品性能的目的。比如我們看到很多產品踢動了界面插件功能,允許用戶動態地更換程序的界面,這就可以通過更換界面dll來實現。

3. 提供二次開發的平臺:

用戶可以單獨利用dll調用其中實現的功能,來完成其他應用,實現二次開發。

4. 節省內存:

如果多個應用程序使用同一個dll,該dll的頁面只需要存入內存一次,所有的應用程序都可以共享它的頁面,從而節省內存。

二、dll的創建

第一步: 創建cpp 和 h 文件。
1、在VS中創建xxx.h, xxx.cpp

2、xxx.h 內容格式如下:

#ifdef BUILD_XXX_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif

extern “C”{
EXPORT void example(void); //被調用的函數聲明
… …
}

xxx.cpp內容格如下:

#define BUILD_XXX_DLL
#include “xxx.h”

void example(void) //被調用的函數
{
}
… …

注意:
1.__declspec是關鍵字,用于表示該函數、變量是導出、導入的,括號里dllexport意為其將要導出,dllimport意為其將要導入。

2.extern "C"用于指定編譯器編譯后的函數別名,這樣使用時才能正確查找到。即對于變量extern int a;這樣的直接寫為extern “C” int a;即可,函數同理。

具體過程如下:
1、建立項目:

單擊下一步,選擇DLL方式,創建項目




建立MyCode.cpp 內容如下:

#include "stdafx.h" #include "MyCode.h"#define BUILD_MYCODE_DLLint Add(int a, int b) {return (a + b); }

建立 MyCode.h 內容如下:

#ifndef _MYCODE_H_ #define _MYCODE_H_#ifdef DLLDEMO_EXPORTS #define EXPORTS_DEMO _declspec( dllexport ) #else #define EXPORTS_DEMO _declspec(dllimport) #endifextern "C" EXPORTS_DEMO int Add(int a, int b);#endif

第二步:生成解決方案。
此時自動生成了MyCode,此時在項目的debug 文件下會自動生成MyDLLDemo.dll 和 MyDLLDemo.lib 文件。

三、dll的使用

移除 stdafx.cpp, stdafx.h,targetver.h

myProject 項目中只剩下 myProject.cpp 文件

右鍵,設定myProject 項目為啟動項。

在myProject.cpp 右鍵,彈出的屬性對話框中,選擇不使用預編譯頭。
修改myProject.cpp 文檔內容,如下:

#include<windows.h> #include<iostream> #include "..\MyDLLDemo\MyCode.h"using namespace std;#pragma comment(lib,"..\\debug\\MyDLLDemo.lib") int main(int argc, char* argv[]) {cout << Add(2, 3) << endl;return 0; }

最后 運行,OK!調用成功。

總結

以上是生活随笔為你收集整理的VS C++生成dll和静态调用dll的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。