vc动态链接库的调用 LoadLibrary()路径问题

来源:百度知道 编辑:UC知道 时间:2024/09/20 07:26:31
我现在用VC编写一个动态链接库, 应用程序设置好相对路径调用我写的DLL, 而我的DLL 又调用了别的DLL,我调用的DLL和我写的DLL是在同一个目录下的,请问我在编写DLL时用LoadLibrary()加载其他的DLL的时候怎么解决这个路径问题,谢谢
请问 我再DLL 写 BSTR[100]; GetCurrentDir(BSTR); 可是提示 不认识这函数 ,谢谢

你在问题补充里面说的非常正确

你需要通过改变工作目录(work path)来使得你的DLL能够正确的加载别人的DLL,我也遇到过这个问题

根据你说的情况,你应该这样
1 用GetCurrentDir保存当前的工作目录
2 用SetCurrentDir将当前的工作目录,设置为你的DLL所在的路径,需要使用绝对路径
3 用LoadLibrary你的DLL
4 使用SetCurrentDir恢复到原来的工作路径

DLL加载进程序的时候就属于程序的一部分所以 LoadLibrary 的当前目录就是EXE所在的目录。

举个例子

c:\a\1.exe
c:\b\2.dll
c:\c\3.dll

这种情况 1.exe 加载2.dll 就是 LoadLibrary("..\b\2.dll")

而2.dll加载3.dll一样的写法。

默认搜索顺序是:
1.当前程序所在目录下查找
2.系统环境变量Path指定的有个系统路径序列,按照先后顺序一步步查找。

最好将第三方dll的路径加入系统环境变量Path的最后。
或者绝对路径或者相对路径 .. or . 来控制

同一目录的话直接写上DLL的名字就可以了。不放心的话就写上绝对路径。