☰
vs2022怎么创建并使用自定义动态库?
2026/10/30 4:54:10 网站建设 项目流程

vs2022怎么创建并使用自定义动态库?

  • 本文标题:vs2022怎么创建并使用自定义动态库?
  • 更新时间:2026年10月13日17:28:44

整体思路

  1. 创建一个使用自定义dll的vs代码项目,如dllUseTest;
  2. 在该项目的解决方案下,创建一个生成自定义dll的子项目,如计算器功能的dll, Calculator.dll;
  3. 创建一个单独的头文件,便于代码复用,声明动态库的导入,导出宏定义;
  4. 子项目Calculator,实现几个简单测试接口,并使用导出宏定义,导出需要对外暴露的接口函数;
  5. 在dllUseTest项目属性中,配置Calculator库的依赖,以及引用;
  6. 在dllUseTest项目的main.cpp中,调用自定义dll的接口,测试dll能否使用;

总结

  • 对于自定义动态库来说,是导出接口函数,预处理器需要添加导出宏定义;
  • 对于使用自定义动态库的项目来说,是导入接口函数,预处理器需要添加导入宏定义;
  1. 本次示例代码的动态库导入导出宏定义,写法是定义了导出宏,则导出;未定义,则默认导入;
  2. 所以只需要在自定义动态库子项目中,预处理器添加导出宏即可;
  3. 使用动态库的主项目,预处理器无需添加导入宏定义;因为未定义,则默认导入;

内容介绍

  1. 新建空项目(作为启动项目,调用自定义dll)

  1. 右键解决方案-新建解决方案文件夹-作为自定义dll工程

  1. 右键自定义dll工程的解决方案文件夹-添加新建项目

  1. 新建空项目(输出自定义dll工程)

  1. 配置新项目名称

  1. 名称配置为计算器动态库项目

  1. 设置计算器项目属性的配置类型为dll

  1. 计算器项目属性-添加预处理器-导出动态库
  • 预处理器名称与代码中,动态库的导入、导出宏定义相同;
  • MY_DLL_EXPORT

  1. 右键解决方案-属性

  1. 解决方案属性-配置项目依赖项

  1. dllUseTest-引用

  1. 右键-添加引用

  1. 勾选引用的dll名称

  1. 运行结果

  1. vs的代码项目结构图

常见问题

  • 无法解析的外部符号

解决办法

  • 计算器项目属性-添加预处理器-导出动态库
  • 确认动态库已导出

  • 添加引用

示例代码

// export_dll.h#pragmaonce#ifdefMY_DLL_EXPORT#defineMY_DLL_DECL__declspec(dllexport)#else#defineMY_DLL_DECL__declspec(dllimport)#endif//
// Calculator.h#pragmaonce#include"export_dll.h"#ifdef__cplusplusextern"C"{#endif// 打印函数名MY_DLL_DECLvoidprint_self();// 两个数字取较小数MY_DLL_DECLintget_min(inta,intb);// 两个数字取较大数MY_DLL_DECLintget_max(inta,intb);#ifdef__cplusplus}#endifclassMY_DLL_DECLCalculator{public:Calculator()=default;~Calculator()=default;// 加法intadd(inta,intb);// 减法intsubtract(inta,intb);};
// Calculator.cpp#include"Calculator.h"#include<iostream>// 打印函数名voidprint_self(){std::cout<<__FUNCTION__<<std::endl;}// 两个数字取较小数intget_min(inta,intb){std::cout<<__FUNCTION__<<", a :"<<a<<", b :"<<b<<", min = "<<(a<=b?a:b)<<std::endl;returna<=b?a:b;}// 两个数字取较大数intget_max(inta,intb){std::cout<<__FUNCTION__<<", a :"<<a<<", b :"<<b<<", max = "<<(a>=b?a:b)<<std::endl;returna>=b?a:b;}// 加法intCalculator::add(inta,intb){std::cout<<__FUNCTION__<<", a :"<<a<<", b :"<<b<<", a + b = "<<(a+b)<<std::endl;returna+b;}// 减法intCalculator::subtract(inta,intb){std::cout<<__FUNCTION__<<", a :"<<a<<", b :"<<b<<", a - b = "<<(a-b)<<std::endl;returna-b;}
// main.cpp#include<iostream>#include<string>#include"Calculator/Calculator.h"intmain(intargc,char**argv){std::cout<<__FUNCTION__<<", dll use test"<<std::endl;inta=100;intb=200;intvalue=0;// C语言格式的接口print_self();value=get_min(a,b);std::cout<<"get min, value :"<<value<<std::endl;value=get_max(a,b);std::cout<<"get min, value :"<<value<<std::endl;// C++ 类的接口Calculator calculator;value=calculator.add(a,b);std::cout<<"calculator add, value :"<<value<<std::endl;value=calculator.subtract(a,b);std::cout<<"calculator subtract, value :"<<value<<std::endl;return0;}

参考资料(向原创作者致谢)

  • 无

转载说明

  • 原创文章,转载请注明出处!
  • 本篇博客内容若侵害您的合法权益,请及时在本文评论区联系我们!我们看到后会及时改正。

文章合集(欢迎阅读)

  • 传送门:本文作者(指艺)的其他文章

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询