【问题标题】:C++ Delayed Load DLL Linker ErrorC++ 延迟加载 DLL 链接器错误
【发布时间】:2017-11-29 03:16:48
【问题描述】:

我有一个程序在一个配置中从 foo.dll 调用函数,而第二个配置不使用 foo.dll。我想要求 foo.dll 仅在需要时出现。我目前使用

在两个版本之间切换
#define FLAGVAR 0

#define FLAGVAR 1

其中 FLAGVAR==1 表示使用了 foo.dll。然后我将我的导入语句和函数声明包围起来,如下所示:

#if FLAGVAR == 1
#import "foo_file.h"
#endif
...

#if FLAGVAR == 1
int foobar() {...}
#endif

如果我在 Linker->Input->Additional Dependencies 中包含 foo.dll,那么无论 FLAGVAR 的值如何,我的程序都会构建。

这是我的问题:

我不想要求 foo.dll 出现在 FLAGVAR == 0 的版本中。因此,我将 foo.dll 移至 Linker->Input->Delay Loaded DLL。现在如果 FLAGVAR==0 那么它不需要 foo.dll 并且构建良好。但是,如果 FLAGVAR==1,那么我会收到一堆 LNK2019 错误,抱怨 foo.dll 中的函数无法链接。

当 FLAGVAR==1 时,我怎样才能实现只需要 foo.dll 的目标?我是否错误地使用了延迟的 dll 加载?提前感谢您的帮助!

使用 Visual Studio 2017 版本 15.4.5

【问题讨论】:

标签: c++ visual-studio dll linker-errors


【解决方案1】:

根据来自 cmets 的此链接解决:C++ Visual Studio: linking using pragma comment

我没有在 Visual Studio 的属性对话框中放置任何可选库。相反,在头文件中,我放了以下几行:

#if FLAGVAR == 1
#pragma comment(lib, "foo.lib")
#endif

【讨论】:

    猜你喜欢
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2021-05-06
    相关资源
    最近更新 更多