最佳方式来帮助Windows找到我链接到的DLL?
我的代码使用的库是一个静态/隐式链接的DLL(我们称之为DLLB),但在运行时它无法找到它。
尽管将DLLB与调用它的代码放在同一个目录中。 (调用代码本身就是一个DLL,它是从python调用的DLLA,它是从arcpy调用的,我不太清楚为什么python会发现DLLA很好,但是DLLA没有找到DLLB,尽管它们在同一个目录中) 。
如果我把库DLL放在系统路径的某个地方,一切正常。
但是,部署的最佳方法是什么? 在安装时向客户机上的系统路径添加条目? 在加载DLL之前,在运行时从python修改系统路径? 还有别的吗?
Python必须在LoadLibrary调用中指定DLL的完整路径。 这是推荐的做法。 如果仅指定模块名称,则可能会加载错误的DLL,可能会引入二进制种植漏洞。
请注意,尽管默认搜索路径包含可执行文件的加载目录,但它不包含从其他DLL加载的目录。 所以你看到的行为和预期的一样。
如果您可以使用动态加载,则可以查找DLLA的路径并使用它来构建DLLB的路径。
要获取DLLA的模块句柄,请调用GetModuleHandleEx。 要从模块句柄中获取DLLA的完整路径,请调用GetModuleFileName。 检查最后一个元素是否是DLLA.dll,并将其替换为DLLB.dll。 然后你可以调用LoadLibrary。
链接地址: http://www.djcxy.com/p/44547.html上一篇: Optimum way to help windows find the dll I'm linking to?
下一篇: How to get the location of the DLL currently executing?