vs2017 中简单创建 dll 和 显示引用dll文件

参考 :

在C++中调用DLL中的函数(3)
VS2017动态链接库(.dll)的生成与使用
VS2017——C语言dll编译并调用
#import ,#pragma comment ,LoadLibrary"三种引入dll的方式都分别在什么时候使用?
VS自带工具:dumpbin的使用

前提:

因为需求,要用到dll,之前有段时间要用,但一直卡在缺少其它dll问题的困惑中(其实是dll没放入),所以并没有成功显示链接过dll,这次花了点时间解决了

##Dll 和 静态链接库 :##
Dll也就是 动态链接库(Dynamic Link Library) 的简称,动态链接库 则是 一个可以被其它应用程序(.exe)共享的程序模块,其中封装了一些可以被共享的例程和资源 ,在应用程序调用时 调用库里面的资源 这就是Dll的动态

静态链接库在 程序链接阶段 将源文件中用到的库函数与汇编生成的目标文件.o合并生成可执行文件 ,这回使得生成的可执行文件 过大,而且对库的修改 不方便,但是可移植性强

Dll 的创建 :

1. 创建dll项目
vs2017 中简单创建 dll 和 显示引用dll文件_第1张图片
vs2017 中简单创建 dll 和 显示引用dll文件_第2张图片

2. 创建头文件
vs2017 中简单创建 dll 和 显示引用dll文件_第3张图片
vs2017 中简单创建 dll 和 显示引用dll文件_第4张图片

3. 写dll
MathFuncDll.h

#pragma once

#define MathFuncDll_API __declspec(dllexport)

MathFuncDll_API double Add(double a, double b);
MathFuncDll_API double Divide(double a, double b);

MathFuncDll.cpp

// MathFuncDll.cpp: 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"  //预编译头

#include "MathFuncDll.h"
#include   //标准的异常类

double Add(double a, double b) 
{
	return a + b;
}

double Divide(double a, double b) 
{
	if (b == 0) 
	{
		throw std::invalid_argument("b 不能是 0!");
	}
	return a / b;
}

4. 生成解决方案
vs2017 中简单创建 dll 和 显示引用dll文件_第5张图片

显示链接Dll

1. 创建空项目

vs2017 中简单创建 dll 和 显示引用dll文件_第6张图片

vs2017 中简单创建 dll 和 显示引用dll文件_第7张图片
2. 把dll 添加到项目中
vs2017 中简单创建 dll 和 显示引用dll文件_第8张图片
注意:一定要放在这个红色的文件夹中,LoadLibrary 中的 路径 就是从这里开始(写绝对路径的话),最好再给dll整合到一个文件夹中 ,我 这里就放在Math文件夹中
vs2017 中简单创建 dll 和 显示引用dll文件_第9张图片
vs2017 中简单创建 dll 和 显示引用dll文件_第10张图片

3. 写代码调用
创建main.cpp

#include 
#include 

using namespace std;

int main() 
{
	typedef double(*fAdd)(double a, double b);
	typedef double(*fDivide)(double a, double b);

	HMODULE dll = LoadLibrary("Math/MathFuncDll.dll");
	cout << GetLastError() << endl; // 获得错误信息,如果缺少dll,报126,正确返回0
	if (dll != NULL) 
	{
		fAdd Add = fAdd(GetProcAddress(dll, MAKEINTRESOURCE(1)));
		if (Add != NULL)
		{
			cout << Add(2, 3) << endl;  //5
		}

		fDivide Divide = fDivide(GetProcAddress(dll, MAKEINTRESOURCE(2)));
		if (Divide != NULL)
		{	
			try
			{
				cout << Divide(5, 0) << endl;
			}
			catch (exception &e) {
				cout << "Caught exception:" << e.what() << endl;
			}
			cout << Divide(6, 2) << endl;
		}

		FreeLibrary(dll);
	}

	system("pause");
	return 0;
}

4. 运行
vs2017 中简单创建 dll 和 显示引用dll文件_第11张图片

##自己遇到的问题:##
在调用dll时候,把dll放入工程,开始我以为直接拖入工程,就可以了,如图
vs2017 中简单创建 dll 和 显示引用dll文件_第12张图片
其实这个没有什么用,运行,会报126,也就是缺少dll文件,也就是dll文件并没有加入这个工程

在解决这个缺少dll文件时,找到一个工具,能查看到dll
InspectExe,安装 路径自定义下,其它都是下一步

####使用方式:####
1.右键dll属性
vs2017 中简单创建 dll 和 显示引用dll文件_第13张图片

2.点击inspectexe,查看
vs2017 中简单创建 dll 和 显示引用dll文件_第14张图片
vs2017 中简单创建 dll 和 显示引用dll文件_第15张图片

你可能感兴趣的:(c++)