返回信息流先说情况
一个程序 要实现插件功能 所有的插件写成dll
现在有的插件有依赖的动态链接库
程序路径示意图如下
app.exe
plugins\
+ plugin_a\
| + plugin_a.dll
| + liba.dll
| - libb.dll
- plugin_b\
+ plugin_b.dll
- libc.dll
plugin_a.dll依赖liba.dll libb.dll 隐式调用
plugin_b.dll依赖libc.dll 隐式调用
app.exe用LoadLibrary动态加载plugin_a.dll, plugin_b.dll
这个时候会出现找到不liba.dll libb.dll libc.dll而加载失败的问题
这种情况应该怎么处理 在不改变文件安排结构的情况下
程序用vc2008写的 MFC的破玩意 =。=||
这是一条镜像帖。来源:北邮人论坛 / cpp / #46662同步于 2010/11/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
问一个dll路径的问题
Torpedo666
2010/11/22镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
隐式调用的意思是static link吗?如果是的话在使用plugin_a.dll时不应该会出现找不到liba.dll啊
【 在 Torpedo666 (鱼雷导弹No.2) 的大作中提到: 】
: 先说情况
: 一个程序 要实现插件功能 所有的插件写成dll
: 现在有的插件有依赖的动态链接库
: ...................
Load-Time Dynamic Linking
还是动态链接
【 在 FadeToBlack 的大作中提到: 】
: 隐式调用的意思是static link吗?如果是的话在使用plugin_a.dll时不应该会出现找不到liba.dll啊
: 【 在 Torpedo666 (鱼雷导弹No.2) 的大作中提到: 】
: : 先说情况
: ...................
现在只能每次load前 在app.exe里调用
BOOL WINAPI SetDllDirectory(
__in LPCTSTR lpPathName
);
貌似暂时可以解决问题 =。=||
不知道有没更好的办法 感觉这个办法太dirty了。。
呃 相对路径?
我试试看
【 在 thynson 的大作中提到: 】
: 把DLL的路径加入PATH环境变量,或者LoadLibrary的时候传相对路径
: --
传相对路径不好使
path应该是可以的 想办法折腾一下
【 在 thynson 的大作中提到: 】
: 把DLL的路径加入PATH环境变量,或者LoadLibrary的时候传绝对路径
: --
原来是liba.dll的dll寻找路径问题……
这个的确要设置一下
不过相对路径应该也可以,如果只能用绝对路径,那岂不是很混乱
【 在 Torpedo666 (鱼雷导弹No.2) 的大作中提到: 】
: 现在只能每次load前 在app.exe里调用
: BOOL WINAPI SetDllDirectory(
: __in LPCTSTR lpPathName
: ...................
不能这样玩,你看下DLL的相关知识就知道了。
WIN下查找DLL有三个路径:应用程序路径,系统目录路径,用户指定目录(SetDllDir)。
总之你这样比较麻烦。