我写了一个C++ DLL,它使用Sybase的本机C库连接到Sybase数据库。我可以在C盘上构建和运行程序,其他人可以从C盘运行程序,并且一切正常。但在某些情况下,我的DLL和Sybase DLL都位于F驱动器而不是C驱动器上。在这些情况下,我的DLL显然无法加载Sybase DLL。从不同的驱动器号运行时,C++ DLL失败
我有点不清楚链接是如何工作的,但基于我的不完全理解,我最好的猜测是DLL的C驱动器位置是内置到最终DLL中的东西,这是导致它失败的原因当它从另一个驱动器号运行时。这听起来像一个合理的解释?任何其他原因,我的DLL将无法加载从另一个驱动器号运行时的Sybase DLL?任何想法如何解决这个问题?
编辑︰原来这是错误的问题,但它导致我在正确的方向。 Sybase DLL使用ini文件来确定数据库连接详细信息,并且我已将硬编码到C驱动器的路径。
当DLL可能不存在或者可能无法加载时,运行时加载非常有用:例如,如果Sybase DLL可能已安装或未安装,程序可能会使用Sybase DLL的运行时加载。 – ChrisW 2009-12-02 20:56:47
@ChrisW:是的,但即使如此,你很少使用绝对路径。 – EFraim 2009-12-02 21:04:50
感谢您的链接。这帮助我排除了我原来的理论。原来,我在数据访问代码中有一个C驱动器的位置(一个ini文件)被硬编码。 – 2009-12-02 21:17:57