_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报错情况及其解决方法,帮助用户迅速恢复数据处理流程。
1009 2
|
存储 测试技术 数据库
仓储设计实现问题之聚合实体在DDD中定义如何解决
仓储设计实现问题之聚合实体在DDD中定义如何解决
123 0
|
8月前
|
测试技术 双11 开发者
一文分析架构思维之建模思维
软件里的要素不是凭空出现的,都是源于实际的业务。本文从软件设计本源到建模案例系统的介绍了作者对于建模的思维和思考。
|
10月前
|
存储 机器学习/深度学习 人工智能
【AI系统】昇腾 AI 处理器
本文介绍华为昇腾AI处理器的架构与卷积加速原理,基于达芬奇架构设计,支持云边端一体化解决方案,具备高能效比和强大的3D Cube矩阵计算单元。文章详细解析了昇腾AI处理器的核心组件及其高效的数据处理机制,旨在通过软硬件优化实现高效的卷积计算加速。
699 2
|
存储 JSON 监控
你好,iLogtail 2.0
你好,iLogtail 2.0!
1794 97
|
12月前
|
安全 芯片 SoC
两节锂电池充电芯片和充放电电路如何设计
两节锂电池充电电路设计中,A部分为保护电路,监测电压电流防止电池受损或膨胀;B部分负责电池充电管理,提供过压保护但不过放电保护;C部分则处理电池放电,实现不同电压转换输出。常见充电芯片如PW4284集成USB输入与DC-DC升压,支持8.4V充满及1A输出,并含过压保护。设计中需注意合理布局,如减少噪声干扰和确保功率线宽裕。此外,为保证安全,即便有充电管理芯片,仍需独立的充放电保护电路,如PW7052,来实现全面的电池保护。
两节锂电池充电芯片和充放电电路如何设计
|
人工智能 供应链 算法
揭秘未来科技:量子计算与人工智能的融合之路
在探索未知的道路上,科技总是以令人惊叹的速度前进。本文将带你穿越至技术的前沿,解锁量子计算和人工智能这两大科技巨人的秘密联盟。我们将一窥它们如何共同塑造未来,以及这一结合将如何影响我们的生活和工作。准备好了吗?让我们开始这场思想的旅程!
202 3
|
JSON Java API
Java一分钟之-JPA实体关系:一对一, 一对多, 多对多
【6月更文挑战第14天】Java Persistence API (JPA) 的 ORM 规范简化了数据库操作,重点是实体关系映射。本文讨论了三种主要关系:一对一、一对多和多对多。对于每种关系,都指出了常见问题(如循环引用、懒加载异常)和避免策略(使用注解解决循环引用,明确级联操作边界等)。同时,提供了示例代码以展示如何在实践中设置这些关系。理解并妥善处理这些问题能提升开发效率和数据准确性。
679 1
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
|
机器学习/深度学习 人工智能 搜索推荐
深度学习在医学影像诊断中的应用与未来展望
本文探讨了深度学习在医学影像诊断中的重要应用,分析了其优势和挑战,并展望了未来发展方向。通过对当前技术进展和研究成果的详细分析,揭示了深度学习在提高诊断精度、加快影像分析速度和个性化医疗中的潜力,以及面临的数据隐私、模型可解释性等挑战。最后,展望了结合多模态数据、引入自监督学习等新兴技术可能带来的新突破,为未来医学影像诊断领域的进一步发展提供了思路和展望。
346 27