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

C++;从不同的驱动器号运行DLL时失败 我编写了一个C++ DLL,它使用Sybase的本地C库连接到Sybase数据库。我可以在我的C驱动器上构建和运行程序,其他人也可以在他们的C驱动器上运行程序,一切正常。但在某些情况下,my DLL和Sybase DLL都位于F驱动器而不是C驱动器上。在这些情况下,我的DLL显然无法加载Sybase DLL,c++,dll,build-process,linker,C++,Dll,Build Process,Linker,我有点不清楚链接是如何工作的,但基于我不完全的理解,我最好的猜测是DLL的C驱动器位置是最终DLL中内置的位置,这是它从不同驱动器号运行时失败的原因。这听起来合理吗?当从不同的驱动器号运行时,my DLL无法加载Sybase DLL的任何其他原因?你知道我该怎么解决这个问题吗 编辑:原来这是一个错误的问题,但它把我引向了正确的方向。Sybase DLL使用ini文件来确定数据库连接的详细信息,我有硬编码到C驱动器的路径。这是.net吗?F驱动器是网络驱动器吗?当您将.net exe复制到网络驱动

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


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

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

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

此处描述了系统查找DLL的位置:


虽然可以用绝对路径加载DLL,但TyChiCik称为运行时DLL加载——但是我怀疑没有很多程序这样做。

< P>是DLL和Sybase DLL存储在路径上的位置?

不,这是一个非托管C++ DLL调用一个C DLL。这不是代码访问安全问题。我没有回答另一部分:不,F是分区,不是网络驱动器。Sybase DLL在路径中。我的DLL实际上完全位于另一台服务器上,但正在使用完整路径和名称动态加载。加载我的DLL的可执行文件从路径中的某个位置运行。当DLL可能不存在或不可加载时,运行时加载非常有用:例如,如果Sybase DLL可能已安装或未安装,则程序可能会使用Sybase DLL的运行时加载。@ChrisW:是的,但即使如此,您也很少使用绝对路径。感谢链接。这帮助我排除了我最初的理论。事实证明,我在数据访问代码中的某一点上硬编码了一个C-drive位置(一个ini文件)。