练习DLL的使用

练习dll库的创建与使用

一、创建dll库

1.1、新建项目–“Win32项目”
在这里插入图片描述
在这里插入图片描述
1.2、应用程序类型选择DLL,并选择空项目创建
在这里插入图片描述
1.3、添加源文件与头文件
在这里插入图片描述
在这里插入图片描述

/* myDLL.h */
#pragma once;
#ifdef DLL_IMPLEMENT
#define DLL_API _declspec(dllexport)	//在生成dll的项目中为dllexport
#else
#define DLL_API _declspec(dllimport)	//在调用该dll的项目中为 dllimport
#endif


extern "C" DLL_API int add(int a, int b, int c);

//extern "C"是解决C与C++的兼容问题
/* myDLL.cpp */
#define DLL_IMPLEMENT

#include<windows.h>
#include<stdio.h>
#include"myDLL.h"

/* 求和函数的实现 */
extern "C" DLL_API int add(int a, int b, int c)
{
	return a + b + c;
}
/* DLL_API 该宏定义在头文件中 */
/* extern "C" 告诉编译器按C语言规则编译 */

1.4、修改编译器选项
在这里插入图片描述
1.5、生成解决方案
在这里插入图片描述
在这里插入图片描述
在x64/Release文件夹下可以看到生成的库文件
在这里插入图片描述

二、调用DLL库

2.1、新建项目–“Win32控制台应用程序”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.2、添加源文件、头文件

/* callDLL.cpp */
#include"myDLL.h"
#include<stdio.h>

#pragma comment(lib,"myDLL.lib")

int main() {

	int sum = add(1, 2, 3);       //调用求和函数
	printf("调用DLL求和结果:%d", sum);
	getchar();
	return 0;
}

头文件拷贝myDLL.h过去使用。
在这里插入图片描述
2.3、添加DLL、LIB库文件

  • 在x64/Debug文件夹下,添加所要调用的dll文件。若是找不到x64/Debug,可以先“生成解决方案”,会自动创建该文件夹。
    在这里插入图片描述
    在这里插入图片描述
    点击“生成解决方案”,报错,但是会自动创建x64/Debug文件夹。
    然后在该文件夹下添加DLL文件。在这里插入图片描述
    在头文件与源文件目录下添加LIB文件。
    在这里插入图片描述
    2.4、调试运行
    CTRL+F5调试运行。
    在这里插入图片描述

三、小结

3.1、创建DLL库的方法

  • 两种方法区别在于export(导出)方法不同。
  • 第一种:.cpp与.h
    使用宏定义规定导出的变量、函数的格式,如在头文件中定义了宏DLL_IMPLEMENT:
#ifdef DLL_IMPLEMENT
#define DLL_API _declspec(dllexport)	//在生成dll的项目中为dllexport
#else
#define DLL_API _declspec(dllimport)	//在调用该dll的项目中为 dllimport
#endif

接着,在声明和定义时都得使用该宏,如在头文件声明时:

extern "C" DLL_API int add(int a, int b, int c);

在源文件定义时:

/* 求和函数的实现 */
extern "C" DLL_API int add(int a, int b, int c)
{
	return a + b + c;
}
/* DLL_API 该宏定义在头文件中 */
/* extern "C" 告诉编译器按C语言规则编译 */
  • 第二种:.cpp、.h、.def(不常用)
    不使用导出符号,而是使用导出文件(.def)。你可以在DLL工程中,添加一个Module-Definition File(.def)文件。.def文件为链接器提供了有关被链接器程序的导出、属性及其它方面的信息。

3.2、调用DLL库的方法

  • 隐式导入
    加入 #pragma comment(lib, “xxx\xxx.lib”),比如上面的例子:
#pragma comment(lib,"myDLL.lib")
  • 显式导入
    先放置好dll文件,之后LoadLibrary载入dll
    getProcAddress获取dll 接口 使用函数指针指向该接口,使用函数指针指向该指针
    释放dll FreeLibray(HMODULE)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值