全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何用C++制作DLL动态链接库?C++ DLL的创建与调用方法【教程】

用C++制作DLL需导出函数并规范调用约定:头文件用宏控制__declspec(dllexport/dllimport),推荐extern "C"避免名字修饰;实现时注意CRT依赖;调用分隐式(链接.lib+DLL同路径)和显式(LoadLibrary/GetProcAddress)。

用C++制作DLL就是把一些函数或类打包成一个独立的动态库文件,让其他程序在运行时加载调用。关键在于导出符号、正确声明调用约定,并处理好依赖和路径问题。

一、创建DLL项目(Visual Studio为例)

新建项目 → 选择“动态链接库(DLL)”模板 → 勾选“空项目”更清晰。在头文件(如MyMath.h)中用__declspec(dllexport)声明要对外公开的函数:

  • #ifdef MYMATH_EXPORTS宏控制导出/导入:编译DLL时定义该宏,导出函数;调用方不定义,改为__declspec(dllimport)
  • 推荐统一用extern "C"防止C++名字修饰(name mangling),方便C/C++通用调用
  • 示例头文件:
#ifdef MYMATH_EXPORTS
#define MYMATH_API __declspec(dllexport)
#else
#define MYMATH_API __declspec(dllimport)
#endif

extern "C" {
    MYMATH_API int Add(int a, int b);
    MYMATH_API int Multiply(int a, int b);
}

二、实现DLL功能(.cpp文件)

MyMath.cpp中实现函数,注意包含对应头文件,且无需再写__declspec前缀(由宏自动处理):

  • 确保函数体简洁,避免在DLL中直接使用std::cout等依赖CRT的全局对象(除非明确静态链接CRT)
  • 若需导出类,建议用抽象接口+工厂函数方式,避免跨模块内存管理问题
  • 编译后生成MyMath.dll和配套的MyMath.lib(用于隐式链接)

三、在主程序中调用DLL

有两种主流方式:隐式链接(推荐初学者)和显式链接(更灵活)。

  • 隐式链接:把MyMath.hMyMath.lib加入主项目,链接器设置附加依赖项为MyMath.lib;运行时确保MyMath.dll在可执行目录或系统PATH中
  • 显式链接:用LoadLibraryGetProcAddress手动加载,适合插件式架构;需检查返回值防崩溃,用完调用FreeLibrary
  • 调用示例(隐式):
#include "MyMath.h"
#include 
int main() {
    std::cout << Add(3, 5) << "\n";        // 输出8
    std::cout << Multiply(4, 6) << "\n";   // 输出24
}

四、常见问题与注意事项

DLL不是exe,它本身不能直接运行,必须被宿主程序加载。容易踩坑的地方有:

  • 调用约定不一致(如DLL用__cdecl,调用方用__stdcall)→ 编译报错或栈异常
  • 字符集不匹配(Unicode/Multi-Byte)→ 字符串传参乱码,建议统一用UTF-8或宽字符+L""
  • 运行时库冲突(DLL动态链接/MT,主程序静态链接/MD)→ 启动失败或内存泄漏,可在项目属性→C/C++→代码生成→运行时库中统一设置
  • 调试时找不到DLL → 把DLL拷到exe同目录,或用SetDllDirectory临时添加搜索路径

基本上就这些。写DLL不复杂但容易忽略细节,关键是导出声明、调用约定、运行时库三者对齐,再配好头文件和lib文件,就能稳定复用逻辑了。


# cad  # ai  # c++  # lsp  # 架构  # extern  # 字符串  # 接口  #   # 对象  # visual studio  # 隐式  # 头文件  # 主程序  # 加载  # 就能  # 找不到  # 可在  # 为例  # 要对  # 有两种 


相关文章: 在线制作视频网站免费,都有哪些好的动漫网站?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  建站之星收费标准详解:套餐费用及年费价格表一览  如何通过可视化优化提升建站效果?  营销式网站制作方案,销售哪个网站招聘效果最好?  宝塔建站助手安装配置与建站模板使用全流程解析  建站与域名管理如何高效结合?  Python lxml的etree和ElementTree有什么区别  如何基于PHP生成高效IDC网络公司建站源码?  临沂网站制作公司有哪些,临沂第四中学官网?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  香港服务器WordPress建站指南:SEO优化与高效部署策略  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  SQL查询语句优化的实用方法总结  高端智能建站公司优选:品牌定制与SEO优化一站式服务  建站VPS能否同时实现高效与安全翻墙?  孙琪峥织梦建站教程如何优化数据库安全?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  如何快速搭建高效香港服务器网站?  如何快速搭建个人网站并优化SEO?  ppt制作免费网站有哪些,ppt模板免费下载网站?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  如何选购建站域名与空间?自助平台全解析  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  建站之星2.7模板快速切换与批量管理功能操作指南  如何在新浪SAE免费搭建个人博客?  长沙企业网站制作哪家好,长沙水业集团官方网站?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  公众号网站制作网页,微信公众号怎么制作?  如何在万网开始建站?分步指南解析  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站主机系统SEO优化与智能配置核心关键词操作指南  打鱼网站制作软件,波克捕鱼官方号怎么注册?  网站专业制作公司有哪些,做一个公司网站要多少钱?  太原网站制作公司有哪些,网约车营运证查询官网?  定制建站流程步骤详解:一站式方案设计与开发指南  智能起名网站制作软件有哪些,制作logo的软件?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  江苏网站制作公司有哪些,江苏书法考级官方网站?  如何选择美橙互联多站合一建站方案?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  大连 网站制作,大连天途有线官网?  招商网站制作流程,网站招商广告语?  Bpmn 2.0的XML文件怎么画流程图  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  Thinkphp 中 distinct 的用法解析  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。