C ++与Visual Studio 2017-在加载时动态链接时操纵库搜索顺序

时间:2018-12-20 15:10:43

标签: c++ dynamic-linking load-time

我在Windows上有一个用MSVC编译的C ++应用程序,该应用程序在运行时链接到许多dll。该应用程序具有Excel前端:.xll文件,用户可以将其加载到excel中。用户应该能够从任何位置加载xll。

所有dll都位于共享驱动器上,并且没有用户将此位置添加到他/她的Windows路径变量中(我不希望那样,因为这些dll可能与其他程序冲突)。我制作了该应用程序,以便在启动该应用程序时,在本地更改Windows路径变量(仅在运行该应用程序的会话中)以包括这些dll的路径。

这仅起作用,因为在我的Visual Studio解决方案中,我可以指定应延迟加载这些dll(运行时动态加载)。

这是我的问题:我想将boost-python用于python前端。 Boost python会在启动应用程序时(加载时链接)强制我的应用程序加载python27.dll,即没有延迟。

我实际上尝试了延迟连接,并出现以下错误: 1> LINK:致命错误LNK1194:由于导入了数据符号“ __imp___Py_NoneStruct”,无法延迟加载“ python27.dll”;没有/DELAYLOAD:python27.dll的链接

我的问题是我是否可以从应用程序内部以某种方式修改加载时间搜索路径?

请注意,所有使用Excel前端的用户都不打算使用python前端(这是针对另一组用户的),因此我无法确定那些Excel用户已安装python,特别是不是2.7版。

非常感谢, 内尔

1 个答案:

答案 0 :(得分:1)

您无法从应用程序内部修改加载时间搜索路径,因为尚未加载您的应用程序以执行任何操作。最好的办法是使用某种类型的包装程序,例如将设置环境的批处理文件或其他脚本,或者将具有完全限定路径的DLL链接到网络共享。