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

时间:2017-11-29 03:16:49

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

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

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

#define FLAGVAR 1

其中FLAGVAR == 1表示使用foo.dll。然后我将我的import语句和函数声明包围起来:

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

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

如果我在链接器中包含foo.dll->输入 - >附加依赖项,那么无论FLAGVAR的值如何,我的程序都会构建。

这是我的问题:

我不想要求在FLAGVAR == 0的版本中出现foo.dll。因此,我将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

1 个答案:

答案 0 :(得分:0)

根据评论中的此链接解决:C++ Visual Studio: linking using pragma comment

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

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