代码之家  ›  专栏  ›  技术社区  ›  John M Gant aman_novice

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

  •  0
  • John M Gant aman_novice  · 技术社区  · 15 年前

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

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

    编辑: 原来这是个错误的问题,但它引导我走上了正确的方向。SybaseDLL使用一个ini文件来确定数据库连接的详细信息,我有一个硬编码到C驱动器的路径。

    3 回复  |  直到 15 年前
        1
  •  1
  •   EFraim    15 年前

    一般来说,绝对位置不在DLL中使用。只存储DLL的名称。

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

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

        2
  •  0
  •   Hogan    15 年前

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

        3
  •  0
  •   Liz Albin    15 年前

    您的dll和Sybase dll是否存储在路径上?