子文件夹中的C++ dll

问题描述 投票:-1回答:1

我正试图编写一个ActiveX插件,当我试图从子文件夹中加载DLL时,我发现自己陷入了死胡同。我是在Visual Studio 2013 for Windows 10中开发的。

库的结构如下。

myocx.ocx --> this is the compiled result
mylibs/
  mainlib.lib
  maindll.dll
  rest-of-dlls.dll

我没有在代码中直接加载DLLs,而是由 "mainlib.lib "库使用。我尝试在VS Linker的 "附加依赖 "中设置mainlib.lib文件的路径,但它无法注册我的插件。如果我把 "maindll.dll "指定为延迟加载DLL,那么它就会编译,但插件无法工作(它在delayhlp.cpp的某个点上失败)。

我看了以下帖子。

以及微软的以下文档。

我试着将库的路径添加到我系统的PATH环境变量中,但由于某些原因,它在某些PC上不起作用。

我也试过manifest的方式(如第一个链接问题中所述),但看起来VS完全忽略了它,因为我可以在那里写任何东西,但无论如何都会失败。

如果我把DLLs和插件放在同一个文件夹里,就可以了,但是由于兼容性问题,我真的需要把它们放在一个子文件夹里,所以这个选项被抛弃了。

我不介意使用动态加载,但我不知道这是否可行,因为DLLs不是在我的代码中加载,而是在一个.lib文件中。我也不介意修改 PATH 变量,但正如我所说,在某些 Windows 安装中,它是失败的。

除了链接的帖子中所说的之外,有谁能给我一些启示?

c++ visual-studio dll
1个回答
0
投票

在拉我的头发很多,我设法使用上述链接的组合来解决它。

在Visual Studio中,我在 "Linker "部分添加了库的路径,并将mainlib.lib添加到依赖项中。然后,我把maindll.dll添加到延迟加载的DLL中,在代码中(主类,就在导入之后),我添加了以下内容。

#pragma comment(lib, "mainlib.lib")

然后在类的初始化器中,我添加了以下内容:

SetDllDirectory("absolute_path_to_my_DLLs_folder")

然后,.ocx插件就可以用regsvr32编译和注册了,并且在执行时没有失败。

© www.soinside.com 2019 - 2024. All rights reserved.