gpt4 book ai didi

c++ - __declspec(dllimport) 的真正含义是什么?

转载 作者:IT老高 更新时间:2023-10-28 12:05:17 49 4
gpt4 key购买 nike

我看到的Qt源代码是这样的:

class Q_CORE_EXPORT QBasicAtomicInt
{
public:
...
};

Q_CORE_EXPORT 宏定义如下:

define Q_DECL_IMPORT __declspec(dllimport)

那么 __declspec(dllimport) 到底是什么意思?

最佳答案

__declspec是 Microsoft 特定的属性,允许您指定存储类信息。
(Nitpicker's Corner:但是,许多其他编译器供应商——例如 GCC——现在支持这种语言扩展,以便与针对 Microsoft 编译器编写的已安装代码库兼容。有些甚至提供额外的存储类属​​性。)

可以指定的两个存储类属性是 dllimportdllexport。这些向编译器指示函数或对象是从 DLL 中导入或导出的(分别)。

更具体地说,它们定义了客户端的 DLL 接口(interface),而不需要模块定义 (.DEF) 文件。大多数人发现使用这些语言扩展比创建 DEF 文件要容易得多。

出于显而易见的原因,__declspec(dllimport)__declspec(dllexport) 通常是相互配对的。您使用 dllexport 将符号标记为从 DLL 导出,然后使用 dllimport 将该导出的符号导入另一个文件。

正因为如此,并且由于在编译 DLL 时和在使用 DLL 接口(interface)的客户端代码中通常使用相同的头文件,所以定义一个在编译时自动解析为适当属性说明符的宏是一种常见模式-时间。例如:

#if COMPILING_DLL
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif

然后用DLLEXPORT标记所有应该导出的符号。

大概,这就是 Q_CORE_EXPORT 宏所做的,解析为 Q_DECL_IMPORTQ_DECL_EXPORT

关于c++ - __declspec(dllimport) 的真正含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8863193/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com