在Visual Studio中,您创建一个.dll项目,它会创建.dll和.lib文件。您静态链接到.lib,如果.dll与.exe位于同一文件夹中,一切正常。
我怀疑如果.dll在System32或任何其他PATH文件夹中,一切都会有效(请确认或更正)。
但问题是:我希望我的exe在./DLLS/文件夹中找到.dll,也就是说,如果我的exe在...... / MyApp / MyApp.exe中,那么它应该查找.dll在..... / MyApp / DLLS / MyDll.dll中。我不想在路径中包含DLLS文件夹。有什么方法可以做到这一点吗?
请注意,我不希望显式使用LoadLibrary,因此我无法在那里指定路径。
提前感谢您的帮助。
答案 0 :(得分:3)
以下是Win32应用程序在查找DLL时所经历的默认序列:
http://msdn.microsoft.com/en-us/library/7d83bc18(VS.80).aspx
因此,根据这一点,另一种方法可能是调用SetCurrentDirectory或SetDllDirectory。但为了使其工作,您必须使用延迟加载库功能(在Visual Studio的“项目设置”中指定)。延迟加载库意味着DLL仅在程序需要时加载,而不是在程序启动时自动加载。
答案 1 :(得分:2)
您可以使用SetDllDirectory
。加载器将使用您在加载库时指定的其他目录。但是,只能有一个额外的目录,因此您需要确保在应用程序的稍后部分没有对此进行其他调用,否则将忽略您指定的目录。
如果该API不允许相关目录(我不确定),您总是可以使用NULL
第一个参数调用GetModuleFileName
来获取当前正在执行的程序的文件名。通过一点字符串操作,您可以获得DLL文件夹的绝对路径。