dllimport和dllexport的作用

疑问

经常在一些项目的源代码中看到如下所示的代码,这究竟有何用意呢?

#ifdef DLL_EXPORTS
      #define SIMPLE_EXPORT __declspec(dllexport)
#else
      #define SIMPLE_EXPORT __declspec(dllimport)
#endif

dllexport vs dllimprot

先解释一下__declspec(dllexport)和__declspec(dllimport)的作用:

dllexport是在这些类、函数或者数据在声明的时候使用的,目的是表明这些东西可以被外部函数使用。
dllimport是在外部程序需要使用DLL内相关内容时使用的,目的是告诉编译器这些函数、类或者数据是从外部导入的。

那上面这几行代码有何作用呢?

原来,我们在编译DLL库时,是会定义DLL_EXPORTS这个宏的,这时使用的是__declspec(dllexport)这个关键字,表明这些函数是导出的,可以被外部调用;
但在调用DLL这个库时,也一样要包含这个头文件,而且函数声明的时候也同样加了SIMPLE_EXPORT用以修饰;而这时是没有定义DLL_EXPORTS这个宏的,使用的是__declspec(dllimport)这个关键字,告诉外部程序,使用的接口是从外部导入的。

注意:其实dllimport不声明也行,但是官方是建议声明的:使用__declspec(dllimport)会生成更好的代码。

你可能感兴趣的:(C/C++,c++,dll,编译器)