云南网站开发报价成都网站建设市场

张小明 2026/1/3 15:01:19
云南网站开发报价,成都网站建设市场,网站建设与管理学校,网红营销策略C / C 调用 DLL 的几种常见方法#xff08;详解 示例#xff09; 在 Windows 平台开发中#xff0c;DLL#xff08;Dynamic Link Library#xff0c;动态链接库#xff09; 是非常核心的一种代码复用方式。 无论是#xff1a; 调用第三方 SDK拆分大型工程插件化设计…C / C 调用 DLL 的几种常见方法详解 示例在 Windows 平台开发中DLLDynamic Link Library动态链接库是非常核心的一种代码复用方式。无论是调用第三方 SDK拆分大型工程插件化设计COM / OPC / 工控 / 驱动相关开发都会不可避免地用到C / C 调用 DLL。本文将从零基础视角出发系统讲清楚DLL 是什么C/C 调用 DLL 的 3 种主流方式每种方式的使用场景常见坑点与避坑建议一、DLL 是什么一句话理解DLL 是一个“在运行时被加载的函数集合”和静态库.lib的核心区别项目DLL静态库链接时间运行时编译期文件.dll .lib.lib更新可单独替换需重新编译内存多进程共享各自一份二、最基础示例先做一个 DLL1、 编写 DLL 源码// mydll.h#pragmaonce#ifdefMYDLL_EXPORTS#defineMYDLL_API__declspec(dllexport)#else#defineMYDLL_API__declspec(dllimport)#endifexternCMYDLL_APIintAdd(inta,intb);// mydll.cpp#defineMYDLL_EXPORTS#includemydll.hintAdd(inta,intb){returnab;}关键点解释__declspec(dllexport)导出函数__declspec(dllimport)导入函数extern C防止 C 名字修饰非常重要2、 编译生成打开 VS 开发者命令行在开始菜单中找到并打开x64 Native Tools Command PromptforVS2022注意位数x86 DLL → 用 x86 Native Toolsx64 DLL → 用 x64 Native Tools使用cl.exe生成Debug版DLL带 PDB最常用 Debug 编译命令推荐cl /LD /Zi /Od /MDd /EHsc mydll.cpp各参数含义编译选项参数说明参数含义/LD生成 DLL/Zi生成调试信息PDB/Od关闭优化便于调试/MDd使用 Debug CRTmsvcrtd.dll/EHsc标准 C 异常处理推荐D:\test\dllcl /LD /Zi /Od /MDd /EHsc mydll.cpp 用于 x86 的 Microsoft(R)C/C 优化编译器19.50.35720 版 版权所有(C)Microsoft Corporation。保留所有权利。 mydll.cpp Microsoft(R)Incremental Linker Version14.50.35720.0 Copyright(C)Microsoft Corporation. All rights reserved. /out:mydll.dll /dll /implib:mydll.lib /debug mydll.obj D:\test\dll编译结果mydll.dll ← Debug DLLmydll.lib ← 导入库mydll.pdb ← 调试符号文件关键指定 Debug 输出目录cl /LD /Zi /Od /MDd mydll.cpp ^ /Fe:Debug\mydll.dll ^ /Fd:Debug\mydll.pdb生成结果Debug\├── mydll.dll ├── mydll.lib └── mydll.pdbRelease 版对照cl /LD /O2 /MD mydll.cppDebugRelease/Zi /Od /MDd/O2 /MD有 pdb可选 pdb可单步优化后难调试编译选项参数说明最终你会得到mydll.dll mydll.lib三、方式一隐式链接最推荐最常用适用场景DLL 在开发时就确定SDK / 内部模块不需要动态卸载1、调用方代码#includeiostream#includemydll.hintmain(){intrAdd(2,3);std::coutresult rstd::endl;return0;}2、工程设置Visual Studio添加 lib项目属性链接器 → 输入 → 附加依赖项添加mydll.lib放置 dllmydll.dll放在exe 同目录或 PATH 目录优点语法最简单编译期检查函数签名性能最好缺点DLL 缺失 → 程序启动直接失败四、方式二显式加载LoadLibrary / GetProcAddress适用场景插件系统可选功能DLL 可能不存在逆向 / 热更新 / 工控系统常用示例代码#includewindows.h#includeiostreamtypedefint(*AddFunc)(int,int);intmain(){HMODULE hDllLoadLibraryA(mydll.dll);if(!hDll){std::coutLoadLibrary failedstd::endl;return-1;}AddFunc Add(AddFunc)GetProcAddress(hDll,Add);if(!Add){std::coutGetProcAddress failedstd::endl;FreeLibrary(hDll);return-1;}intrAdd(3,4);std::coutresult rstd::endl;FreeLibrary(hDll);return0;}关键注意点函数名必须是导出名C 函数如果没有extern C名字会被修饰函数指针签名必须完全一致可以使用下面的命令查看函数指针签名dumpbin /exports mydll.dll调用约定要一致__cdecl / __stdcall优点程序可在 DLL 缺失时继续运行灵活性极高缺点写法复杂容易崩溃函数签名不匹配五、方式三DLL .lib但运行时可选进阶这是方式一和方式二的混合体编译期链接.lib运行时通过LoadLibrary判断是否可用适合大型工程 / 插件化 SDK。六、C 类如何导出 / 调用1、DLL 导出类示例class__declspec(dllexport)MyClass{public:intAdd(inta,intb);};不推荐直接跨 DLL 导出 C 类原因ABI 不稳定编译器 / STL 版本耦合内存管理容易炸工程实践建议DLL 对外只暴露 C 接口内部再用 C七、常见坑点总结新手必看1、忘记 extern “C”externC__declspec(dllexport)intFunc();否则GetProcAddress很容易失败。2、32 位 / 64 位不匹配32 位 exe ❌ 加载 64 位 dll会直接LoadLibrary失败用dumpbin /headers xxx.dll查看位数3、 调用约定不一致__stdcall vs __cdecl不一致 → 栈损坏 → 程序随机崩溃4、 DLL 放置路径错误Windows 查找 DLL 顺序exe 同目录系统目录PATH 环境变量八、如何查看 DLL 导出函数实用技巧dumpbin /exports mydll.dll可以看到函数名序号是否被修饰这是调试GetProcAddress的神器。九、实际工程建议经验总结新项目优先 extern “C” 隐式链接插件系统显式加载不要跨 DLL 传 STL 容器不要在不同 CRT 中 free 内存十、总结一句话DLL 是 Windows 下模块化的核心能力会用 DLL才算真正进入 C/C 工程开发。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

建筑人才网站哪个比较好做电脑壁纸的网站

Linux 文件压缩、归档与文本文件管理全解析 1. Linux 中的文件压缩 在 Linux 系统里,文件压缩是一项常见且重要的操作,它能有效节省磁盘空间。下面为你介绍几种常用的压缩工具及其使用方法。 1.1 xz 压缩 xz 是 Linux 中空间利用率最高的压缩工具,不过它的压缩速度相对较…

张小明 2025/12/23 9:17:51 网站建设

成华区微信网站建阿里云做电影网站

Vosk Android离线语音识别终极指南:快速构建无网络语音应用 【免费下载链接】vosk-android-demo alphacep/vosk-android-demo: Vosk Android Demo 是一个演示项目,展示了如何在Android平台上使用Vosk语音识别引擎进行实时语音转文本功能。Vosk是开源的离…

张小明 2025/12/23 9:17:49 网站建设

昆明网站建设技术公司商业网站建设的方法

RTA与SNMP技术详解 RTA相关内容 在RTA(可能是某种系统或程序)的使用中,会遇到各种错误情况,下面对这些错误进行详细介绍。 常见错误及含义 SELECT或UPDATE语句请求列不存在 :当回复显示请求的列不存在时,会提示 ERROR: SQL parse error ,其中 %s 会被替换为请求…

张小明 2025/12/25 0:55:14 网站建设

石家庄公司建设网站wordpress 首页

如何构建企业级Vue工作流审批系统:钉钉风格完整实现指南 【免费下载链接】Workflow 仿钉钉审批流程设置 项目地址: https://gitcode.com/gh_mirrors/work/Workflow 在数字化办公时代,高效的工作流审批系统已成为企业提升运营效率的关键工具。基于…

张小明 2026/1/3 10:26:39 网站建设

怎么在一个网站做多个页面宁夏建设工程交易中心网站

FaceFusion镜像内置水印系统:版权保护新机制 在AI生成内容(AIGC)爆发式增长的今天,一张由算法“换脸”生成的照片或一段深度合成视频,可能只需几秒就能完成。然而,当这些内容被恶意传播、伪造身份甚至用于诈…

张小明 2025/12/27 17:43:37 网站建设

网站做seo收录网站开发项目进度完成表

深入探索 Apache Web 服务器的安装、配置与安全设置 在当今数字化的时代,Web 服务器的搭建与配置对于各类业务的开展至关重要。Apache 作为一款广泛使用的 Web 服务器软件,其功能强大且可定制性高。本文将详细介绍 Apache Web 服务器的安装、配置以及安全设置等方面的内容,…

张小明 2025/12/25 1:51:42 网站建设