我只想简单,简洁地解释这两者之间的区别.MSDN在这里没有详细介绍.
__declspec( dllexport )
- 如此标记的类或函数将从其内置的DLL中导出.如果您正在构建DLL并且需要API,则需要使用此文件或单独的.DEF文件来定义导出(MSDN)).这很方便,因为它将定义保存在一个位置,但.DEF文件提供了更多选项.
__declspec( dllimport )
- 如此标记的类或函数将从DLL导入.这实际上并不是必需的 - 无论如何都需要一个导入库来使链接器满意.但是当正确标记时dllimport
,编译器和链接器有足够的信息来优化调用; 没有它,您可以在导入库中获得与存根函数的正常静态链接,这会增加不必要的间接.ONT1 ONT2
__declspec(dllexport)
告诉链接器您希望此对象可供其他DLL导入.在创建其他人可以链接到的DLL时使用它.
__declspec(dllimport)
从DLL导入实现,以便您的应用程序可以使用它.
我只是一个新手C/C++开发人员,所以也许有人得到了比我更好的解释.
两种不同的用例:
1)您正在dll中定义类实现.您希望其他程序使用该类.在这里你使用dllexport,因为你正在创建一个你希望dll公开的类.
2)您正在使用dll提供的功能.您包含随DLL提供的标头.这里标头使用dllimport引入当前程序使用的实现.
通常在两种情况下使用相同的头文件并定义宏.构建配置根据需要定义要导入或导出的宏.
Dllexport用于将函数标记为已导出.您在DLL中实现该函数并将其导出,以便任何使用您的DLL的人都可以使用它.
Dllimport则相反:它将函数标记为从DLL导入.在这种情况下,您只需声明函数的签名并将代码与库链接.