Visual c++ dllexport与dllimport之间的差异

Visual c++ dllexport与dllimport之间的差异,visual-c++,dll,Visual C++,Dll,我已经搜索了一些Microsoft教程和所有相关的stackoverflow线程,以找到正确的答案。它们对我来说都不够清楚 仍然有一些疑问 “_declspec(dllexport)-这样标记的类或函数将从其内置的DLL中导出” vs “_declspec(dllimport)-这样标记的类或函数将从DLL导入” 这很难理解,因为“从DLL导入”和“从DLL导出”是什么意思。您可以从导出和导入到某物,或者从导入和导出到某物 我的理解是: dllexport用于指定我要将此代码加载到我正在创建的D

我已经搜索了一些Microsoft教程和所有相关的stackoverflow线程,以找到正确的答案。它们对我来说都不够清楚

仍然有一些疑问

“_declspec(dllexport)-这样标记的类或函数将从其内置的DLL中导出”

vs

“_declspec(dllimport)-这样标记的类或函数将从DLL导入”

这很难理解,因为“从DLL导入”和“从DLL导出”是什么意思。您可以从导出和导入到某物,或者从导入和导出到某物

我的理解是: dllexport用于指定我要将此代码加载到我正在创建的DLL中,而dllimport用于告诉编译器我要使用DLL中的代码


正确吗?

当您想使用dll中的内容时,您需要包含good.h文件,该文件将包含u declspec(dllimport)(通常使用#define宏完成,以便在编译时在导出和导入之间进行相应的切换)

因此,您将从提供此.h文件的dll导入

相反,当您编译此dll时,.h文件包含u declspec(dllexport),告诉编译器/链接器从我们的dll导出此部分。

您是否阅读了以下内容:


也许这会让我更好地理解它——什么时候出口的事情真的发生了?在创建或使用DLL时?编译DLL时,会公开其他DLL或exe可以使用的函数和类。如果查看编译dll时生成的.lib文件,可以看到刚编译的dll中可以访问的内容。因此,dllexport将函数放在dll中的导出表中,使其可用于其他程序。其他程序可以使用dllimport加载这些函数。对吗?差不多。dllimport是与_declspec结合使用的工具,用于将链接器引用到要使用的对象/函数。这是在编译包含要在自己的程序中使用的定义的.h头文件时发生的。这些函数的实际加载是在dll加载阶段完成的,而这一阶段不是编译或链接。根据本文,我决定稍微玩玩一下:有趣的是,即使我去掉了“#define mathfuncsdl_API_uudeclspec(dllexport)”行,它也能正常工作。即使我重建了这个项目。是Visual studio 2013自动修复问题吗?还是我还没拿到?