__declspec(dllexport) 和 __declspec(dllimport)的区别

Posted Key_Ky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了__declspec(dllexport) 和 __declspec(dllimport)的区别相关的知识,希望对你有一定的参考价值。

最近看MXNet的源码,其中c_api.h中发现遇到__declspec(dllexport) 和 __declspec(dllimport)。

__declspec(dllexport)用于导出符号,也就是定义该函数的dll;__declspec(dllimport)用于导入,也就是使用该函数。
因为这个头文件既要被定义该函数的dll包含,也要被使用该函数的程序包含,当被前者包含时我们希望使用__declspec(dllexport)定义函数,当被后者包含时我们希望使用dllimport。于是我们使用
#ifdef _EXPORTING
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif
这种技巧,在定义该函数的dll中,其编译选项定义了_EXPORTING而使用该函数的程序则没有定义。 

以上是关于__declspec(dllexport) 和 __declspec(dllimport)的区别的主要内容,如果未能解决你的问题,请参考以下文章

__declspec(dllexport)

MFC dll def文件和_declspec(dllexport)问题

如何在 stl 模板中使用导出的类 (__declspec(dllexport))?

__declspec(dllexport) 静态链接库到 dll

Windows 和 Linux 上的 C++ [[gnu::visibility("default")]] vs __declspec(dllexport)

使用可见性属性(没有 __declspec(dllexport))时,Clang 可以生成导入库吗?