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项目
这里写图片描述
这里写图片描述

2. 创建头文件
这里写图片描述
这里写图片描述

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 <stdexcept>  //标准的异常类

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. 生成解决方案
这里写图片描述

显示链接Dll

1. 创建空项目

链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cHqGrnD3-1571046375226)

述
2. 把dll 添加到项目中
这里写图片描述
注意:一定要放在这个红色的文件夹中,LoadLibrary 中的 路径 就是从这里开始(写绝对路径的话),最好再给dll整合到一个文件夹中 ,我 这里就放在Math文件夹中
这里写图片描述
这里写图片描述

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

#include <iostream>
#include <Windows.h>

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. 运行
这里写图片描述

##自己遇到的问题:##
在调用dll时候,把dll放入工程,开始我以为直接拖入工程,就可以了,如图
这里写图片描述
其实这个没有什么用,运行,会报126,也就是缺少dll文件,也就是dll文件并没有加入这个工程

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

####使用方式:####
1.右键dll属性
这里写图片描述

2.点击inspectexe,查看
这里写图片描述
这里写图片描述

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值