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
我有一个程序在一个配置中调用 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