从不同的驱动器号运行时 C++ DLL 失败

标签 c++ dll build-process linker

我编写了一个 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/

相关文章:

c++ - 调用 boolean 函数但出现错误 "no matching function to call"?

c++ - 传递给另一个函数时获取数组的长度

c# - 在 Visual Studio Community 2017 上禁用 Visual Studio 托管进程

performance - 有什么方法可以改善构建/编译时间?

python - 将数据加载到内存中以获得更快的响应

c++ - 仅专门化嵌套模板

c++ - visual studio中创建dll的理解

c# - 将相同的命名空间拆分到不同的程序集中有什么好的理由?

c# - C# 中的 Delphi DLL - var 数组作为参数

css - 如何自动化 CSS 构建过程?