讲师中心 微信公众号

工具推荐

视频效率加速
updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

Laper
Laper

剧本策划到成片协作

立刻MV
立刻MV

低成本歌曲 MV、视频生成

C++怎么生成DLL C++动态链接库封装流程【指南】

梦磊姑娘_2288

梦磊姑娘_2288

发布时间:2026-02-28 13:33:17

|

1031人浏览过

|

来源于php中文网

原创

c++怎么生成dll c++动态链接库封装流程【指南】

怎么用 Visual Studio 创建一个能被调用的 DLL

必须显式导出函数,否则生成的 DLL 里没有可调用符号。默认情况下 C++ 编译器会做名字修饰(name mangling),GetProcAddress 找不到原始函数名。

  • 在函数声明前加 extern "C" __declspec(dllexport),比如:
    extern "C" __declspec(dllexport) int add(int a, int b) { return a + b; }
  • 不加 extern "C" 会导致导出名类似 ?add@@YAHHH@Z,调用方几乎无法硬编码匹配
  • 项目属性 → 配置属性 → 常规 → 配置类型必须设为 DynamicLibrary (.dll),不是静态库或应用程序
  • 生成后检查是否真有导出:用 dumpbin /exports your.dll,输出里得看到干净的 add,而不是一串乱码

为什么 C++ DLL 被 C# 或 Python 调用时总报“找不到入口点”

根本原因通常是调用方用的名字和 DLL 实际导出的不一致,尤其在没加 extern "C" 时最常见。

  • C# 的 [DllImport] 必须和 dumpbin 显示的导出名完全一致;如果用了 extern "C",就写 "add";如果没加,就得写修饰后的全名(不推荐)
  • Python 的 ctypes.CDLL().add 同理,属性访问名必须匹配导出名
  • 32/64 位必须严格匹配:x64 程序不能加载 x86 DLL,反之亦然,错误信息常是“模块未找到”而非“入口点”,容易误判
  • 依赖的运行时(如 msvcp140.dll)没部署到目标机器也会表现为“找不到过程入口”,用 Dependencies.exe 查真实缺失项

导出类或 C++ 对象给外部语言安全吗

不安全,也不可行。跨语言调用只应走纯 C 接口,对象模型、异常、内存布局、RTTI 全都不兼容。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 不要导出 class MyClass 或任何含虚函数、std::string、vector 的类型
  • 可以导出工厂函数,比如 extern "C" __declspec(dllexport) MyHandle create_instance();,内部用 new 分配,再提供 destroy_instance(MyHandle) 配套释放
  • 所有参数和返回值限制为基本类型(int、double、const char*)、指针或固定大小结构体;字符串建议用 UTF-8 编码的 const char* + 长度参数
  • 别让外部语言调用 delete 或析构函数——内存必须由 DLL 内部分配并释放,否则可能触发不同堆的崩溃

怎么让 DLL 在不注册、不放系统目录也能被加载

靠修改调用方的加载路径或使用延迟加载,而不是把 DLL 扔进 System32 ——那既不安全也不便部署。

立即学习“C++免费学习笔记(深入)”;

  • 调用方启动前,用 SetDllDirectory(L".") 把当前目录加入搜索路径(注意宽字符)
  • 或者用 LoadLibrary(L"relative\path\mylib.dll") 传绝对或相对路径,比依赖系统搜索更可控
  • Visual Studio 项目中可在链接器 → 输入 → 延迟加载 DLL 里填 mylib.dll,这样首次调用函数时才加载,失败可捕获异常
  • 避免用 LoadLibrary("mylib") 不带扩展名——Windows 可能错加载同名的 mylib.exe 或其他文件

C++ 导出 DLL 表面简单,真正卡住人的永远是名字修饰、位数对齐、内存归属这三件事。只要导出函数签名干净、调用路径明确、内存边界划清,后面的事就只是路径和依赖的体力活。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7419

2023.08.02

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2438

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1918

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

3144

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6364

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

6489

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

8034

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

12394

2024.04.29

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

80

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn