【发布时间】:2020-04-22 11:49:07
【问题描述】:
我正在尝试编写一个 ActiveX 插件,但在尝试从子文件夹加载 DLL 时发现自己陷入了死胡同。我正在为 Windows 10 开发 Visual Studio 2013。
库的结构如下:
myocx.ocx --> this is the compiled result
mylibs/
mainlib.lib
maindll.dll
rest-of-dlls.dll
我不直接在我的代码中加载 DLL,而是由“mainlib.lib”库使用它们。我试图在 VS Linker 的“附加依赖项”中设置 mainlib.lib 文件的路径,但它无法注册我的插件。如果我将“maindll.dll”指定为延迟加载 DLL,则它会编译,但插件不起作用(它在 delayhlp.cpp 中的某个时间点失败)。
我已阅读以下帖子:
- Altering DLL search path for static linked DLL
- C++ set dll search location
- Load DLL from other folder than the current
- C++ Load DLL From a Subdirectory?
以及来自 Microsoft 的以下文档:
我尝试将库的路径添加到我系统的 PATH 环境变量中,但由于某种原因,它在某些 PC 上不起作用。
我也尝试过清单方式(如第一个链接问题中所述),但看起来 VS 完全忽略了它,因为我可以在那里写任何东西,无论如何它都会失败。
如果我将 DLL 与插件放在同一个文件夹中,它会起作用,但由于兼容性问题,我确实需要将它们放在子文件夹中,因此该选项被丢弃。
我不介意使用动态加载,但我不知道这是否可行,因为 DLL 不是加载到我的代码中,而是加载到 .lib 文件中。我也不介意修改 PATH 变量,但正如我所说,在某些 Windows 安装中它会失败。
除了链接的帖子说什么之外,任何人都可以对此有所了解吗?
【问题讨论】:
标签: c++ visual-studio dll