C++ 中动态链接库--导入和导出的实例详解

发布时间 - 2026-01-11 03:16:51    点击率:

C++ 中动态链接库--导入和导出的实例详解

__declspec(dllexport)和__declspec(dllimport):

 __declspec(dllexport):编译器看到一个变量、函数或者C++类被它修饰,那么它就知道应该在生成的DLL 模块中导出该变量、函数或C++类。
 __declspec(dllimport):编译器看到一个变量、函数或者C++类被它修饰,那么它就知道可执行文件或DLL的源文件需要从其它DLL模块中导入一些变量和函数。

DLL的导入段:

 构建可执行模块时,可执行模块还可以包含一个导入段,其中列出了所有它需要的DLL模块的名称,对列出的每个DLL,
该段还记录了可执行文件的二进制代码中引用的函数和变量的符号名。DLL中也有同样的导入段,
记录它所需要的模块名称和函数、符号名。

DLL文件导出段:

  链接器生成DLL的文件中会嵌入一个导出符号表,这个导出段列出了导出的变量、函数和类的符号名。

extern "C"作用:

  extern "C" 用来告诉编译器不要对变量名或函数名进行改编,这样C/C++或任何编程语言编写的可执行模块都可以访问该变量或函数。

创建兼容DLL:

 C++支持函数重载,C语言不支持函数重载,C++编译器会对函数名进行修改,而C语言则不会。
为了用Microsoft工具包构建一个能与其它编译器厂商的工具包链接的DLL,必须告诉编译器不要对导出的函数名进行改编。
 可通过以下几种方式实现:
  1、extern "C" 修饰导出函数、变量和类;
  2、为项目创建一个.def文件;
     LIBRARY "dll-name.dll"
     EXPORTS
       func-name @ 1
     .def文件的规则为:
     1> EXPORTS语句后列出要导出函数的名称,可以在.def文件中的导出函数名后加 @n,表示要导出函数的序号为n;
     2> .def文件中的注释由每个注释行开始处的分号指定,且注释不能与语句共享一行;
  3、DLL源文件中加入:#pragma comment(linker, "/export:MyFunc=_MyFunc@8")

如有疑问请留言或者到本站社区 交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C++  # 动态链接库  # 实现动态链接库的导入导出  # ubuntu中python调用C/C++方法之动态链接库详解  # C++编写DLL动态链接库的步骤与实现方法  # 浅析C/C++中动态链接库的创建和调用  # PHP中调用C/C++制作的动态链接库的教程  # 在Visual Studio中用C++语言创建DLL动态链接库图文教程  # Python调用C/C++动态链接库的方法详解  # GCC 编译使用动态链接库和静态链接库的方法  # C语言从代码中加载动态链接库过程解析  # 可执行  # 出了  # 工具包  # 要对  # 它就  # 能与  # 可执行文件  # 也有  # 还可以  # 如有  # 希望能  # 会对  # 几种  # 不支持  # 谢谢大家  # 可通过  # 所需要  # 创建一个  # 中会  # 编程语言 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 打开php文件提示内存不足_怎么调整php内存限制【解决方案】  nginx修改上传文件大小限制的方法  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  如何在建站之星绑定自定义域名?  简历没回改:利用AI润色让你的文字更专业  Laravel如何集成Inertia.js与Vue/React?(安装配置)  怎么用AI帮你为初创公司进行市场定位分析?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  长沙企业网站制作哪家好,长沙水业集团官方网站?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  使用Dockerfile构建java web环境  Laravel怎么判断请求类型_Laravel Request isMethod用法  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  高端建站如何打造兼具美学与转化的品牌官网?  微信推文制作网站有哪些,怎么做微信推文,急?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  香港服务器如何优化才能显著提升网站加载速度?  C#如何调用原生C++ COM对象详解  制作企业网站建设方案,怎样建设一个公司网站?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  IOS倒计时设置UIButton标题title的抖动问题  javascript日期怎么处理_如何格式化输出  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  中山网站制作网页,中山新生登记系统登记流程?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  如何选择PHP开源工具快速搭建网站?  如何在 Pandas 中基于一列条件计算另一列的分组均值  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  如何基于云服务器快速搭建网站及云盘系统?  Laravel如何使用Gate和Policy进行授权?(权限控制)  Python图片处理进阶教程_Pillow滤镜与图像增强  网站建设要注意的标准 促进网站用户好感度!  Linux系统命令中screen命令详解  Android自定义listview布局实现上拉加载下拉刷新功能  如何在企业微信快速生成手机电脑官网?  焦点电影公司作品,电影焦点结局是什么?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Laravel如何创建自定义Facades?(详细步骤)  如何在IIS7上新建站点并设置安全权限?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何用搬瓦工VPS快速搭建个人网站?  如何快速搭建高效WAP手机网站吸引移动用户?  使用C语言编写圣诞表白程序