_declspec(dllimport、dllexport)

简介:   这是MFC定义的两宏,用于声明导入导出函数。 __declspec(dllexport) 声明一个导出函数,一般用于dll中 __declspec(dllimport) 声明一个导入函数,一般用于使用某个dll的exe中 __declspec(dllexport)的作用,它就是为了省掉在DEF文件中手工定义导出哪些函数的一个方法。

 

这是MFC定义的两宏,用于声明导入导出函数。
__declspec(dllexport) 声明一个导出函数,一般用于dll中
__declspec(dllimport) 声明一个导入函数,一般用于使用某个dll的exe中

__declspec(dllexport)的作用,它就是为了省掉在DEF文件中手工定义导出哪些函数的一个方法。

 

MSDN对_declspec的说明

在更新的编译器版本中,可以使用 __declspec(dllexport) 关键字从 DLL 导出数据、函数、类或类成员函数。__declspec(dllexport) 会将导出指令添加到对象文件中,因此您不需要使用 .def 文件。

当试图导出 C++ 修饰函数名时,这种便利最明显。由于对名称修饰没有标准规范,因此导出函数的名称在不同的编译器版本中可能有所变化。如果使用 __declspec(dllexport),仅当解决任何命名约定更改时才必须重新编译 DLL 和依赖 .exe 文件。

许多导出指令(如序号、NONAME 和 PRIVATE)只能在 .def 文件中创建,并且必须使用 .def 文件来指定这些属性。不过,在 .def 文件的基础上另外使用 __declspec(dllexport) 不会导致生成错误。

若要导出函数,__declspec(dllexport) 关键字必须出现在调用约定关键字的左边(如果指定了关键字)。例如:

 

__declspec(dllexport) void __cdecl Function1(void);

若要导出类中的所有公共数据成员和成员函数,关键字必须出现在类名的左边,如下所示:

 

class __declspec(dllexport) CExampleExport : public CObject
{ ... class definition ... };

生成 DLL 时,通常创建一个包含正在导出的函数原型和/或类的头文件,并将 __declspec(dllexport) 添加到头文件中的声明中。若要提高代码的可读性,请为 __declspec(dllexport) 定义一个宏并对正在导出的每个符号使用该宏:

 

#define DllExport   __declspec( dllexport ) 

__declspec(dllexport) 将函数名存储在 DLL 的导出表中。如果希望优化表的大小,请参见按序号而不是按名称从 DLL 导出函数。

 

将 DLL 源代码从 Win16 移植到 Win32 时,请用 __declspec(dllexport) 替换 __export 的每个实例。

作为参考,请在 Win32 Winbase.h 头文件中搜索。它包含 __declspec(dllimport) 的用法示例。

相关文章
|
SQL NoSQL Java
Flink SQL 问题之执行报错如何解决
Flink SQL报错通常指在使用Apache Flink的SQL接口执行数据处理任务时遇到的问题;本合集将收集常见的Flink SQL报错情况及其解决方法,帮助用户迅速恢复数据处理流程。
1036 2
|
存储 安全 数据安全/隐私保护
中外AIGC大模型的差距、态势与结构
【1月更文挑战第21天】中外AIGC大模型的差距、态势与结构
540 2
中外AIGC大模型的差距、态势与结构
|
存储 测试技术 数据库
仓储设计实现问题之聚合实体在DDD中定义如何解决
仓储设计实现问题之聚合实体在DDD中定义如何解决
129 0
|
9月前
|
机器学习/深度学习 存储 人工智能
淘天算法工程师玩转《黑神话》,多模态大模型如何成为天命AI
淘天集团未来生活实验室的算法工程师们以ARPG游戏《黑神话:悟空》为平台,探索多模态大模型(VLM)在仅需纯视觉输入和复杂动作输出场景中的能力边界。他们提出了一种名为VARP的新框架,该框架由动作规划系统和人类引导的轨迹系统组成,成功在90%的简单和中等难度战斗场景中取得胜利。研究展示了VLMs在传统上由强化学习主导的任务中的潜力,并提供了宝贵的人类操作数据集,为未来研究奠定了基础。
|
9月前
|
数据可视化 项目管理 UED
如何进行有效的优先级管理:6大模型解析
优先级管理看似简单,但要真正做到高效、精准,却需要方法和技巧的支撑。3分钟了解6种优先级管理方法。
563 0
如何进行有效的优先级管理:6大模型解析
|
存储 JSON 监控
你好,iLogtail 2.0
你好,iLogtail 2.0!
1809 104
|
11月前
|
存储 机器学习/深度学习 人工智能
【AI系统】昇腾 AI 处理器
本文介绍华为昇腾AI处理器的架构与卷积加速原理,基于达芬奇架构设计,支持云边端一体化解决方案,具备高能效比和强大的3D Cube矩阵计算单元。文章详细解析了昇腾AI处理器的核心组件及其高效的数据处理机制,旨在通过软硬件优化实现高效的卷积计算加速。
791 2
|
安全 芯片 SoC
两节锂电池充电芯片和充放电电路如何设计
两节锂电池充电电路设计中,A部分为保护电路,监测电压电流防止电池受损或膨胀;B部分负责电池充电管理,提供过压保护但不过放电保护;C部分则处理电池放电,实现不同电压转换输出。常见充电芯片如PW4284集成USB输入与DC-DC升压,支持8.4V充满及1A输出,并含过压保护。设计中需注意合理布局,如减少噪声干扰和确保功率线宽裕。此外,为保证安全,即便有充电管理芯片,仍需独立的充放电保护电路,如PW7052,来实现全面的电池保护。
两节锂电池充电芯片和充放电电路如何设计
|
JSON Java API
Java一分钟之-JPA实体关系:一对一, 一对多, 多对多
【6月更文挑战第14天】Java Persistence API (JPA) 的 ORM 规范简化了数据库操作,重点是实体关系映射。本文讨论了三种主要关系:一对一、一对多和多对多。对于每种关系,都指出了常见问题(如循环引用、懒加载异常)和避免策略(使用注解解决循环引用,明确级联操作边界等)。同时,提供了示例代码以展示如何在实践中设置这些关系。理解并妥善处理这些问题能提升开发效率和数据准确性。
691 1
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面