創建並調用DLL

本博客參考很多網上博客相關內容主要是博客一博客二

本文通過創建一個簡單的DLL,說明我們通常配置的一些開源庫的各個過程。

DLL就是我們通常所說的動態連接庫(dynamic link library),主要分爲兩個部分創建DLL和調用DLL,即創建一個函數封裝成DLL,然後在另一個函數中調用。本文工程基於vs2015。

  1. 創建DLL過程

首先需要創建DLL項目;新建項目->win32項目,命名“MyDLL”,點擊“確定”、下一步,在應用程序設置界面,應用程序類型選擇DLL

 對於附加選項是否選擇空項目,都可以,在這裏我沒有勾選,是否導出符號也可以不勾選,如果勾選的話;系統會自動生成一個示例。這裏我兩個都沒有勾選,點擊完成。

 

 DLL工程就創建好了,在MyDLL.cpp中我們創建一個計算整數加法的函數int Add(int &a,int &b),然後再創建一個頭文件MyDLL.h填寫函數的聲明,在MyDLL.cpp中要包含MyDLL.h這個頭文件。

// MyDLL.cpp : 定義 DLL 應用程序的導出函數。
//

#include "stdafx.h"
#include"MyDLL.h"

int Add(int &a, int &b)
{
	return a + b;
}

 在MyDLL.h中

#pragma once
/*生成dll工程時,系統會自動定宏MYDLL_EXPORTS
如果沒有創建dll工程。系統不會生成這個宏
可以在"屬性->預處理器->預處理器定義"中看見該宏
以下語句含義是
如果定義了該宏,則DLL_API是導出(本dll工程定義了該宏,所以是導出)
如果沒有定義該宏,則DLL_API是導入(待會要調用dll的工程中沒有定義該宏,所以是導入)
*/
#ifdef MYDLL_EXPORTS
#define DLL_API _declspec(dllexport)
#else 
#define DLL_API _declspec(dllimport)
#endif


extern "C"  DLL_API int Add(int &a, int &b);
/*另一種簡單的寫法 替代上文
#pragma once
extern "C" _declspec(dllexport) int Add(int &a,int &b)
*/

 然後在MyDLL .cpp中點擊生成

可以看到在debug目錄下生成了DLL和lib文件,至此,創建把我們寫的整數加法函數封裝成DLL已經完成。我們待會要調用該函數時,需要用到DLL、lib、以及MyDLL.h這三個文件。DLL裏面實際包含函數的實現過程,頭文件是一個聲明,lib文件是把這兩個文件連接起來。

  1. 調用DLL過程。我們創建一個win32 控制檯項目testDll.cpp,調用剛剛創建的DLL。在testDll.cpp的“屬性->VC++目錄->包含目錄”添加MyDLL.h所在的文件夾路徑,庫目錄添加MyDLL.lib所在的文件夾路徑。在鏈接器->輸入->附加依賴項中添加“MyDLL.lib”名稱。把MyDLL.dll文件放到當前工程debug文件夾下面
  2. 然後在代碼中包含MyDLL,h頭文件,在函數中調用該函數
// testdll.cpp : 定義控制檯應用程序的入口點。
//

#include "stdafx.h"
#include<iostream>
#include"MyDLL.h"
int main()
{
	int a = 3, b = 5;
	std::cout << Add(a, b) <<std:: endl;

    return 0;
}

可以看到,調用成功。以上就是一個簡單的創建DLL項目,並調用的過程。

我們平時VS配置opencv,其實和這個過程很相似,也是調用一系列DLL的過程。不同的是我們不是把所有的DLL放到自己工程的debug目錄下,而是直接放到電腦的的系統變量中,這樣所有的工程都可以調用。

有關創建DLL及調用DLL的其他內容可參考博客一

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章