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

时间:2009-12-02 20:37:02

标签: c++ dll build-process linker

我编写了一个C ++ DLL,它使用Sybase的本机C库连接到Sybase数据库。我可以在我的C盘上构建和运行程序,其他人可以从它的C盘运行它,一切正常。但在某些情况下,我的DLL和Sybase DLL都位于F驱动器而不是C驱动器。在这些情况下,我的DLL显然无法加载Sybase DLL。

我对链接如何工作有点不清楚,但基于我的不完全理解,我最好的猜测是DLL的C驱动器位置是内置到最终DLL中的,这是导致它失败的原因。它来自不同的驱动器号。这听起来像是一个合理的解释吗?从其他驱动器号运行时,我的DLL无法加载Sybase DLL的任何其他原因?知道如何解决这个问题吗?

编辑:原来这是一个错误的问题,但它让我朝着正确的方向前进。 Sybase DLL使用ini文件来确定数据库连接详细信息,并且我有硬编码到C驱动器的路径。

3 个答案:

答案 0 :(得分:1)

一般来说,DLL内部不使用绝对位置。仅存储DLL的名称。

此处描述了系统查找DLL的位置:http://msdn.microsoft.com/en-us/library/ms682586(VS.85).aspx

虽然可以通过绝对路径加载DLL - 使用称为运行时DLL加载的技术 - 但我怀疑没有多少程序这样做。

答案 1 :(得分:0)

这是.net并且F驱动器是网络驱动器吗?当您将.net exe副本复制到网络驱动器并尝试运行代码时,某些版本的Windows会出现一些安全问题。操作系统不会让它运行。我希望这是你的问题。

答案 2 :(得分:0)

是您的DLL和Sybase DLL存储在PATH上的位置吗?