C++如何写一个动态链接库_C++制作dll供其他程序调用【分发】-C++

最小可行DLL需三点:显式导出函数(__declspec(dllexport))、加extern “C”禁用C++名字修饰、运行时库设为/MT静态链接;避免导出类,分发前用dumpbin验证符号名,确保架构与调用方一致。

Windows下用Visual Studio生成DLL的最小可行步骤

直接能被其他程序加载调用的DLL,核心就三点:导出函数、正确的调用约定、匹配的运行时库。VS默认项目模板容易埋坑,别选“动态链接库(DLL)”向导里的“空项目”或勾选“导出符号”,那会自动生成一堆你不需要的宏和样板代码。

  • 新建项目选 Win32 项目 → 下一步 → 勾选 DLL,**取消勾选“预编译头”和“安全开发生命周期检查”**(避免_CRT_SECURE_NO_WARNINGS等干扰)
  • 在主.cpp文件里写函数,用 __declspec(dllexport) 显式导出,例如:
    extern "C" __declspec(dllexport) int add(int a, int b) {
        return a + b;
    }
  • extern "C" 是关键——禁用C++名字修饰,否则其他语言(如C#、Python)根本找不到add这个符号
  • 生成后检查输出目录是否有 .dll 和 .lib 文件;.lib 仅用于静态链接时的符号解析,分发时**不需要给用户**

导出C++类时为什么总加载失败

直接导出类几乎必然失败。DLL里的类对象内存布局、虚函数表、异常处理机制都依赖编译器和运行时版本,跨模块(尤其跨语言)极难对齐。不是不能做,而是成本远高于收益。

  • 真正可靠的做法是:只导出纯C风格函数,用指针传递数据,内部用工厂函数管理对象生命周期
  • 例如导出 __declspec(dllexport) void* create_processor() 和 __declspec(dllexport) void destroy_processor(void* p),所有成员函数通过函数指针或回调方式暴露
  • 若坚持导出类,必须确保调用方和DLL使用**完全相同的编译器版本、运行时库(/MD 或 /MT)、字节对齐设置**,且调用方也得用C++(比如另一个VS项目),否则Access violation或unresolved external symbol是常态

分发DLL时用户报“找不到 VCRUNTIME140.dll”怎么办

这是运行时库不匹配的典型表现。你的DLL依赖VS2015+的UCRT和C++运行时,但用户机器没装对应Visual C++ Redistributable。

  • 最稳妥方案:在项目属性 → C/C++ → 代码生成 → 运行时库 改为 /MT(静态链接)——生成的DLL不再依赖外部vcruntime*.dll,体积略大但免部署烦恼
  • 若必须用/MD(动态链接),则需让用户安装对应版本的 Microsoft Visual C++ Redistributable,注意x86/x64位数必须严格一致
  • 用 Dependency Walker(或更现代的 Dependencies.exe)打开你的DLL,看它实际依赖哪些DLL;若出现VCRUNTIME140D.dll(带D后缀),说明你发布的是Debug版,**绝对不能分发**

Python或C#调用时提示“找不到指定的程序”或“入口点不存在”

这不是路径问题,而是符号名没对上。Windows加载DLL后,是按**精确的函数名字符串**去查表的,任何修饰都会导致失败。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » C++如何写一个动态链接库_C++制作dll供其他程序调用【分发】-C++
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4024774+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4024774+
  • 本周更新: 0+
  • 最后更新: 2026-03-16