资讯动态

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

发布时间:2026/10/30 4:54:24 来源:尧图企业网站定制
vs2022怎么创建并使用自定义动态库本文标题vs2022怎么创建并使用自定义动态库更新时间2026年10月13日17:28:44整体思路创建一个使用自定义dll的vs代码项目如dllUseTest在该项目的解决方案下创建一个生成自定义dll的子项目如计算器功能的dll, Calculator.dll创建一个单独的头文件便于代码复用声明动态库的导入导出宏定义子项目Calculator实现几个简单测试接口并使用导出宏定义导出需要对外暴露的接口函数在dllUseTest项目属性中配置Calculator库的依赖以及引用在dllUseTest项目的main.cpp中调用自定义dll的接口测试dll能否使用总结对于自定义动态库来说是导出接口函数预处理器需要添加导出宏定义对于使用自定义动态库的项目来说是导入接口函数预处理器需要添加导入宏定义本次示例代码的动态库导入导出宏定义写法是定义了导出宏则导出未定义则默认导入所以只需要在自定义动态库子项目中预处理器添加导出宏即可使用动态库的主项目预处理器无需添加导入宏定义因为未定义则默认导入内容介绍新建空项目作为启动项目调用自定义dll右键解决方案-新建解决方案文件夹-作为自定义dll工程右键自定义dll工程的解决方案文件夹-添加新建项目新建空项目输出自定义dll工程配置新项目名称名称配置为计算器动态库项目设置计算器项目属性的配置类型为dll计算器项目属性-添加预处理器-导出动态库预处理器名称与代码中动态库的导入、导出宏定义相同MY_DLL_EXPORT右键解决方案-属性解决方案属性-配置项目依赖项dllUseTest-引用右键-添加引用勾选引用的dll名称运行结果vs的代码项目结构图常见问题无法解析的外部符号解决办法计算器项目属性-添加预处理器-导出动态库确认动态库已导出添加引用示例代码// export_dll.h#pragmaonce#ifdefMY_DLL_EXPORT#defineMY_DLL_DECL__declspec(dllexport)#else#defineMY_DLL_DECL__declspec(dllimport)#endif//// Calculator.h#pragmaonce#includeexport_dll.h#ifdef__cplusplusexternC{#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#includeCalculator.h#includeiostream// 打印函数名voidprint_self(){std::cout__FUNCTION__std::endl;}// 两个数字取较小数intget_min(inta,intb){std::cout__FUNCTION__, a :a, b :b, min (ab?a:b)std::endl;returnab?a:b;}// 两个数字取较大数intget_max(inta,intb){std::cout__FUNCTION__, a :a, b :b, max (ab?a:b)std::endl;returnab?a:b;}// 加法intCalculator::add(inta,intb){std::cout__FUNCTION__, a :a, b :b, a b (ab)std::endl;returnab;}// 减法intCalculator::subtract(inta,intb){std::cout__FUNCTION__, a :a, b :b, a - b (a-b)std::endl;returna-b;}// main.cpp#includeiostream#includestring#includeCalculator/Calculator.hintmain(intargc,char**argv){std::cout__FUNCTION__, dll use teststd::endl;inta100;intb200;intvalue0;// C语言格式的接口print_self();valueget_min(a,b);std::coutget min, value :valuestd::endl;valueget_max(a,b);std::coutget min, value :valuestd::endl;// C 类的接口Calculator calculator;valuecalculator.add(a,b);std::coutcalculator add, value :valuestd::endl;valuecalculator.subtract(a,b);std::coutcalculator subtract, value :valuestd::endl;return0;}参考资料向原创作者致谢无转载说明原创文章转载请注明出处本篇博客内容若侵害您的合法权益请及时在本文评论区联系我们我们看到后会及时改正。文章合集欢迎阅读传送门本文作者指艺的其他文章

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑