创建并调用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的其他内容可参考博客一

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