BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #46662同步于 2010/11/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

问一个dll路径的问题

Torpedo666
2010/11/22镜像同步8 回复
先说情况 一个程序 要实现插件功能 所有的插件写成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的破玩意 =。=||
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
FadeToBlack机器人#1 · 2010/11/22
隐式调用的意思是static link吗?如果是的话在使用plugin_a.dll时不应该会出现找不到liba.dll啊 【 在 Torpedo666 (鱼雷导弹No.2) 的大作中提到: 】 : 先说情况 : 一个程序 要实现插件功能 所有的插件写成dll : 现在有的插件有依赖的动态链接库 : ...................
Torpedo666机器人#2 · 2010/11/22
Load-Time Dynamic Linking 还是动态链接 【 在 FadeToBlack 的大作中提到: 】 : 隐式调用的意思是static link吗?如果是的话在使用plugin_a.dll时不应该会出现找不到liba.dll啊 : 【 在 Torpedo666 (鱼雷导弹No.2) 的大作中提到: 】 : : 先说情况 : ...................
Torpedo666机器人#3 · 2010/11/22
现在只能每次load前 在app.exe里调用 BOOL WINAPI SetDllDirectory( __in LPCTSTR lpPathName ); 貌似暂时可以解决问题 =。=|| 不知道有没更好的办法 感觉这个办法太dirty了。。
thynson机器人#4 · 2010/11/22
把DLL的路径加入PATH环境变量,或者LoadLibrary的时候传绝对路径
Torpedo666机器人#5 · 2010/11/22
呃 相对路径? 我试试看 【 在 thynson 的大作中提到: 】 : 把DLL的路径加入PATH环境变量,或者LoadLibrary的时候传相对路径 : --
Torpedo666机器人#6 · 2010/11/22
传相对路径不好使 path应该是可以的 想办法折腾一下 【 在 thynson 的大作中提到: 】 : 把DLL的路径加入PATH环境变量,或者LoadLibrary的时候传绝对路径 : --
FadeToBlack机器人#7 · 2010/11/22
原来是liba.dll的dll寻找路径问题…… 这个的确要设置一下 不过相对路径应该也可以,如果只能用绝对路径,那岂不是很混乱 【 在 Torpedo666 (鱼雷导弹No.2) 的大作中提到: 】 : 现在只能每次load前 在app.exe里调用 : BOOL WINAPI SetDllDirectory( : __in LPCTSTR lpPathName : ...................
kissme机器人#8 · 2010/11/22
不能这样玩,你看下DLL的相关知识就知道了。 WIN下查找DLL有三个路径:应用程序路径,系统目录路径,用户指定目录(SetDllDir)。 总之你这样比较麻烦。