当前位置: 首页 > news >正文

visual studio 2015 编写C++ 静态库和动态库、调用静态库和动态库

目录

  • 一、静态库
    • 1 创建C++静态库
    • 2 完成示例代码的编写
    • 3 创建“practice”项目来使用StaticLibDemo.lib静态库
    • 4 在“practice”项目的主函数中使用StaticLibDemo.lib静态库
  • 二、动态库
    • 1 创建动态库的方式和创建静态库类似,也是先创建一个空项目,然后将配置类型改成动态库
    • 2 工程目录
    • 3 创建“practice”项目来使用DLLDemo.dll动态库(隐式调用)
    • 4 创建“NewPractice”项目来使用DLLDemo.dll动态库(显示调用)

一、静态库

1 创建C++静态库

1.1 创建一个空项目
在这里插入图片描述
1.2 右键选择项目属性
在这里插入图片描述
1.3 如下图所示选择静态库
在这里插入图片描述

2 完成示例代码的编写

2.1 工程目录如下
在这里插入图片描述
2.2 ArrayTool.h

#ifndef ARRAY_TOOL_H
#define ARRAY_TOOL_Hclass ArrayTool
{public:// 返回 first_num 和 second_num 中的最大值int MaxNum(int first_num,int second_num);
};#endif // !ARRAY_TOOL_H

2.3 ArrayTool.cpp

#include "ArrayTool.h"// 返回 first_num 和 second_num 中的最大值
int ArrayTool::MaxNum(int first_num, int second_num)
{return first_num > second_num ? first_num : second_num;
}

2.4 选择生成
在这里插入图片描述
执行结果如下图所示,可以看到已经生成了StaticLibDemo.lib静态库文件:
在这里插入图片描述

3 创建“practice”项目来使用StaticLibDemo.lib静态库

3.1 工程目录
在这里插入图片描述
3.2 在“practice”项目中引用StaticLibDemo.lib静态库
在这里插入图片描述
在这里插入图片描述
勾选并点击确定后,如下图所示可以看到已经成功引用了StaticLibDemo.lib静态库:
在这里插入图片描述
3.3 在“practice”项目中包含静态库头文件所在的目录,防止代码中包含头文件时出错
在这里插入图片描述
在这里插入图片描述

4 在“practice”项目的主函数中使用StaticLibDemo.lib静态库

main.cpp

#include <iostream>
using namespace std;#include "ArrayTool.h"int main()
{ArrayTool array_tool;int max_num = array_tool.MaxNum(10, -1);cout << "max:" << max_num << endl;getchar();return 0;
}

二、动态库

1 创建动态库的方式和创建静态库类似,也是先创建一个空项目,然后将配置类型改成动态库

在这里插入图片描述

2 工程目录

在这里插入图片描述
ArrayTool.h

#ifndef ARRAY_TOOL_H
#define ARRAY_TOOL_H#ifdef MYLIBRARY_EXPORTS
#define MYLIBRARY_API __declspec(dllexport)  // 导出符号
#else
#define MYLIBRARY_API __declspec(dllimport)  // 导入符号
#endif// 声明一个导出函数
extern "C" MYLIBRARY_API int MaxNum(int first_num, int second_num);#endif // !ARRAY_TOOL_H

ArrayTool.cpp

#define MYLIBRARY_EXPORTS // 为了让导出符号有效,所以才需要定义这个宏
#include "ArrayTool.h"// 返回 first_num 和 second_num 中的最大值
int MaxNum(int first_num, int second_num)
{return first_num > second_num ? first_num : second_num;
}

点击生成,可以看到已经生成了DLLDemo.dll动态库,如下图所示
在这里插入图片描述

3 创建“practice”项目来使用DLLDemo.dll动态库(隐式调用)

3.1 工程目录
在这里插入图片描述
3.2 在“practice”项目中包含动态库头文件所在的目录,防止代码中包含头文件时出错
在这里插入图片描述
3.3 引入DLLDemo.lib符号文件(这个lib文件就在DLLDemo.dll同级目录下,和DLLDemo.dll同时生成的)
在这里插入图片描述
3.4 给DLLDemo.lib符号文件添加搜索路径
如下图所示,先找到DLLDemo.lib所在的目录:
在这里插入图片描述
然后再给DLLDemo.lib符号文件添加搜索路径:
在这里插入图片描述
3.5 在主程序中编写示例代码

#include <iostream>
using namespace std;#include "ArrayTool.h"int main()
{int max_num = MaxNum(20, -1);cout << "max_num:" << max_num << endl;getchar();return 0;
}

4 创建“NewPractice”项目来使用DLLDemo.dll动态库(显示调用)

4.1 工程目录
在这里插入图片描述
main.cpp

#include <iostream>
#include <Windows.h>// 第一步,创建一个函数指针类型FUNC_MaxNum,它引用的函数类型需要和DLL中的导出函数一致
typedef int(*FUNC_MaxNum)(int first_num, int second_num);int main()
{HINSTANCE hDLL;  // 定义一个实例句柄,引用动态库FUNC_MaxNum MaxNum;  // 定义一个函数指针,用来指向导出函数// 第二步,加载动态库文件hDLL = LoadLibrary("DLLDemo.dll");if (hDLL){// 第三步,获取动态库中的函数地址MaxNum = (FUNC_MaxNum)GetProcAddress(hDLL, "MaxNum");if (MaxNum){// 第四步,调用函数int max_num = MaxNum(1, 2);std::cout << "max_num:" << max_num << std::endl;}}// 第五步,释放动态库句柄FreeLibrary(hDLL);getchar();return 0;
}

注意:一定要先编译DLLDemo项目生成动态库文件后才运行主程序,否则找不到DLLDemo.dll。

http://www.lryc.cn/news/606853.html

相关文章:

  • C++--多态
  • 20257月29日-8月2日训练日志
  • 软件测试测评公司关于HTTP安全头配置与测试?
  • 用 Ubuntu 22.04 (Jammy) 的 MongoDB 源
  • Java 学习笔记:常用类、String 与日期时间处理
  • 新手小白做一个简单的微服务
  • oracle的安全加密有哪些?
  • Linux基础 -- 内核快速向用户态共享内核变量方案之ctl_table
  • 编程与数学 03-002 计算机网络 17_云计算与网络
  • 无人设备遥控器之多设备协同技术篇
  • Java,八股,cv,算法——双非研0四修之路day22
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘altair’问题
  • 【Leetcode hot 100】1.两数之和
  • 切比雪夫不等式
  • qcustomplot 大量数据拖拽卡顿,开启opengl
  • SketchUp扩展工具分享:Ropefall v1.02插件轻松实现绳索模拟
  • 1、【C语言】【进阶】数组,指针与退化
  • 函数fdopendir的用法
  • [vue3 echarts] echarts 动态数据更新 setInterval
  • 深度学习(鱼书)day08--误差反向传播(后三节)
  • 轻钢屋顶电动排烟窗(工业用)
  • ansible.cfg 配置文件的常见配置项及其说明
  • SQL中的HAVING用法
  • MySQL--组从复制的详解及功能演练
  • 从O(n²)到O(n log n):深度剖析快速排序的内存优化与cache-friendly实现
  • 高级11-Java日志管理:使用Log4j与SLF4J
  • Oracle EBS 缺少adcfgclone.pl文件
  • 电商前端Nginx访问日志收集分析实战
  • 汇川ITS7100E触摸屏交互界面开发(一)调试事项说明
  • 25电赛e题杂乱环境稳定识别矩形框(附源码)