gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:42:10 24 4
gpt4 key购买 nike

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

最佳答案

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

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

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

关于C++ 延迟加载 DLL 链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47544477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com