【问题标题】:Difference between dllexport vs dllimportdllexport 与 dllimport 之间的区别
【发布时间】:2014-10-30 05:18:10
【问题描述】:

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

This thread 仍有一些疑问。

"__declspec(dllexport) - 如此标记的类或函数将从它内置的 DLL 中导出"

对比

“__declspec( dllimport ) - 如此标记的类或函数将从 DLL 中导入”

好吧,这几乎没有意义,因为“从 DLL 导入”和“从 DLL 导出”是什么意思。您可以导出并导入到某物,或者导入并导出至某物。

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

对吗?

【问题讨论】:

    标签: visual-c++ dll


    【解决方案1】:
    【解决方案2】:

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

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

    相反,当你编译这个 dll 时,.h 文件包含 __declspec( dllexport ),告诉编译器/链接器完成从我们的 dll 导出此类部分的工作。

    【讨论】:

    • 也许这会让我更好地理解它 - 当导出事情真正发生时?在创建 DLL 时,还是在使用它?
    • 当你编译 dll 时,你暴露了可以被另一个 dll 或 exe 使用的函数和类。如果您查看编译 dll 时生成的 .lib 文件,您会看到可以从刚刚编译的该 dll 中访问什么。
    • 因此 dllexport 将函数放在 DLL 内的导出表中,使它们可用于其他程序。其他程序可以使用 dllimport 加载这些函数。对吗?
    • 差不多。 dllimport 是您与 __declspec 一起使用的,以使链接器引用您要使用的对象/函数。这是在编译包含要在自己的程序中使用的定义的 .h 头文件时。这些函数的实际加载是在dll加载阶段完成的,这个阶段不是编译也不是链接。
    • 我决定稍微玩一下,根据这篇文章:msdn.microsoft.com/en-us/library/ms235636.aspx 有趣的是,即使我去掉了“#define MATHFUNCSDLL_API __declspec(dllexport)”行,一切正常。即使我重建项目。它是 Visual Studio 2013 自动修复的吗?还是我还没弄明白?
    猜你喜欢
    • 2010-09-08
    • 1970-01-01
    • 2013-02-05
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2019-04-09
    相关资源
    最近更新 更多