考虑下面的需求,使用一个方法,一个是提供者,一个是使用者,二者之间的接口是头文件。头文件中声明了方法,在提供者那里方法应该被声明为__declspec(dllexport),在使用者那里,方法应该被声明为__declspec(dllimport)。二者使用同一个头文件,作为接口,怎么办呢
.h
#ifdef DLL_EXPORTS
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
DLLEXPORT int add(int ,int);
implement.cpp
#include .h
#define DLL_EXPORT
DLLEXPORT int add(int , int){
<span style="white-space:pre"> </span>/**/
};
user.cpp
#include .h
// don't define DLL_EXPOET
导出变量用 __declspec(dllexport) int a;
导出函数用 __declspec(dllexport) void foo();
导出类用 class __declspec(dllexport) a{};
如果应用程序需要调用dll中的函数,则需要用__declspec(dllimport)修饰,因此当工程中不包含DLL_EXPORTS预定义时,DLLEXPORT 就指代__declspec(dllimport) 这样生成dll程序和调用dll的程序可以使用同一个头文件