C++ 延迟加载 DLL 链接器错误

C++ Delayed Load DLL Linker Error

我有一个程序在一个配置中调用 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 DLLs。现在,如果 FLAGVAR==0 那么它不需要 foo.dll 并且可以正常构建。但是,如果 FLAGVAR==1,那么我会收到一堆 LNK2019 错误,抱怨无法链接 foo.dll 中的函数。

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

使用 Visual Studio 2017,版本 15.4.5

根据评论link解决:C++ Visual Studio: linking using pragma comment

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

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