我编写了一个 C++ DLL,它使用 Sybase 的 native C 库连接到 Sybase 数据库。我可以在我的 C 盘上构建和运行该程序,其他人可以从他们的 C 盘上运行它,一切正常。但在某些情况下,我的 DLL 和 Sybase DLL 都位于 F 盘而不是 C 盘。在那些情况下,我的 DLL 显然无法加载 Sybase DLL。
我有点不清楚链接是如何工作的,但根据我不完全的理解,我最好的猜测是 DLL 的 C 驱动器位置是内置到最终 DLL 中的位置,这就是导致它在以下情况下失败的原因它从不同的驱动器号运行。这听起来像是一个合理的解释吗?当从不同的驱动器盘符运行时,我的 DLL 无法加载 Sybase DLL 的任何其他原因?知道如何解决这个问题吗?
编辑: 结果证明这是一个错误的问题,但它引导我朝着正确的方向前进。 Sybase DLL 使用一个 ini 文件来确定数据库连接的详细信息,并且我有硬编码到 C 驱动器的路径。
最佳答案
一般来说,DLL 中不使用绝对位置。仅存储 DLL 的名称。
系统寻找DLL的地方在这里描述:http://msdn.microsoft.com/en-us/library/ms682586(VS.85).aspx
虽然可以通过绝对路径加载 DLL - 使用称为运行时 DLL 加载的技术 - 但我怀疑没有多少程序这样做。
关于从不同的驱动器号运行时 C++ DLL 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1835626/