静态连接库,动态链接库知识。__declspec(dlldexport)/__declspec(dllimport)含义及使用 __stdcall含义及使用 各种类型dll的含义及使用和区别。 ----------------------------------------------------------------- _stdcall的作用: 这是一种函数调用约定,什么是函数调用约定? 函数调用约定是指当调用一个函数时,参数会被传递给被调用函数和返回值会被传递给调用参数,函数调用约定就是描述参数是怎么被传递的和有谁平衡堆栈的,当然还有返回值。 函数调用约定有:__stdcall,__cdecl,__fastcall,__thiscall,__nakedcall,__pascal 按照参数传递顺序分类: 1. 从右到左入栈:__stdcall、__cdecl、__thiscall(都是两个下划线) 2. 从左到右入栈:__pascal、__fastcall(都是两个下划线) 堆栈清理: 1. 调用者清除栈 2. 被调用函数返回后清楚栈 _stdcall是Wind32 API函数绝大多数采用的调用约定方式,WINAPI也只是_stdcall的一个别名而已。 __stdcall调用约定的主要特征是: 1、参数是从右往左传递的,也是放在堆栈中。 2、函数的堆栈平衡操作是由被调用函数执行的。 3、在函数名的前面用下划线修饰,在函数名的后面由@来修饰并加上栈需要的字节数的空间 【链接库知识锦集】 链接库是软件开发中不可或缺的一部分,它们允许代码模块化,提高代码重用性,减少程序的体积,以及实现跨进程通信。链接库主要分为静态链接库和动态链接库。 1. **静态链接库**: - 静态链接库在编译时将库中的函数和数据合并到最终的可执行文件中,因此生成的程序自包含,不需要运行时依赖额外的库文件。在Windows环境下,常见的静态库扩展名为`.lib`。 - 创建静态库可以通过Visual Studio的"Win32 控制台应用程序"或"Win32 项目"来完成,MFC静态链接库则会使得生成的库文件较大,因为每个使用它的程序都会包含MFC库的副本。 - 引入静态库时,可以在源代码中使用`#pragma comment(lib, "Library.lib")`指令来指示编译器链接对应的库。 2. **动态链接库 (DLL)**: - 动态链接库在运行时才加载,可以节省内存,因为多个程序可以共享同一份库代码。DLL文件扩展名为`.dll`。 - 非MFC动态链接库提供标准C接口,适用于MFC和非MFC程序。MFC动态链接库分为两种:MFC规则DLL和MFC扩展DLL。前者直接链接到MFC库,后者允许更灵活的扩展。 - 导入和导出DLL中的函数、变量或类,可以使用`_declspec(dllimport)`和`_declspec(dllexport)`这两个关键字。`_declspec(dllexport)`用于库内部导出,`_declspec(dllimport)`用于应用程序导入使用。对于静态成员函数,如果不使用`dllimport`可能会导致调用失败。 - `__stdcall`调用约定是Windows API中常用的约定,参数从右向左压栈,由被调用者清理堆栈。其他调用约定如`__cdecl`(默认),`__fastcall`,`__thiscall`等各有特点。 3. **_stdcall的作用**: - `_stdcall`是一种函数调用约定,规定参数传递方式和堆栈清理责任。在Windows API中广泛使用,其特征包括右向左压栈和被调用者清理堆栈。 4. **创建和使用DLL**: - 创建DLL项目时,可以选择相应的模板,编写导出函数和类,并在头文件中使用`_declspec(dllexport)`声明。 - 使用DLL时,需要包含对应的头文件,使用`_declspec(dllimport)`,并可能通过`#pragma comment(lib, "DLLName.lib")`指令链接库文件。 5. **MFC扩展DLL**: - MFC扩展DLL可以拥有自己的消息循环和线程,允许更高级别的定制,但需要额外的管理工作,如处理消息映射和对象创建。 总结来说,链接库的选择取决于项目需求,如内存效率、代码更新、跨平台兼容性等因素。正确理解和使用链接库调用约定可以优化程序性能和内存管理,同时减少潜在的错误。在开发过程中,应根据具体场景选择静态或动态链接,合理运用导出和导入声明,确保程序的稳定性和可维护性。


















剩余8页未读,继续阅读


- 粉丝: 32
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- vue3-ts-cesium-map-show-Typescript资源
- goploy-Go资源
- 【Docker技术】Docker镜像管理与操作指南:镜像的创建、使用、查找及维护方法详解
- 统计输入字符串内各字符出现频次工具
- GeekDesk-C#资源
- 【Docker技术】Docker容器网络连接与端口映射详解:容器互联、端口绑定及DNS配置方法了文档的主要内容
- JFinal-PHP资源
- Layx-JavaScript资源
- 在线刷题测试平台-计算机二级资源
- gchomework-user-毕业设计资源
- c盘优化清理,包括删除休眠、临时文件、磁盘清理等
- MCM_ICM2021-ProblemD-美赛资源
- vcos_components_rt_framework-智能车资源
- part2-01-前端工程化实战资源
- HTML可输入下拉选择框控件重新设计
- RJcenter-开发者效率工具推荐及使用指南资源


