关于dll调用冲突问题

kfb007 2010-06-08 01:44:04
有如下目录结构

程序目录

———— myapp.exe
        |
         ———— dll目录1
        |      |
        |       ———— a1.dll
        |      | 
        |       ———— b.dll
         ———— dll目录2
               |
                ———— a2.dll
               | 
                ———— b.dll
我用LoadLibraryEx调用a1.dll和a2.dll,使用参数LOAD_WITH_ALTERED_SEARCH_PATH,由于b.dll中有同名函数,调用a1.dll或a2.dll函数时会发生访问b.dll中函数报错,我想应该是,同名函数的冲突问题,请问如何加载a1.dll和a2.dll使得a1.dll在dll目录1中访问b.dll,而a2.dll在dll目录2中访问b.dll?
...全文
181 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kfb007 2010-07-02
  • 打赏
  • 举报
回复
比较难,唯一方法是,人家改dll文件名
kfb007 2010-06-21
  • 打赏
  • 举报
回复
dll不是我写的,是引用别人开发的
czysoft 2010-06-21
  • 打赏
  • 举报
回复
我一般都取exe所在文件夹,然后加上相对路径和文件名来LoadLibrary
搜索路径我觉得没有必要,像是在给自己找麻烦
另外可以判断一下dll的版本号,看api是否和exe要求的版本一样
你可以在dll和exe里写同一相同的版本号宏来判断彼此是否对应
forcal 2010-06-21
  • 打赏
  • 举报
回复
“改b.dll名,比较难”,不会吧?
复制“b.dll”,将副本改为“bb.dll”,LoadLibrary时加载“bb.dll”,怎么会比较难呢?
kfb007 2010-06-20
  • 打赏
  • 举报
回复
改b.dll名,比较难,写成com似乎并不能解决问题,因为inproc Com使用原理和dll一样啊,先loadlibrary ocx文件,然后再初始化com取得对象,仍然无法指定调用b.dll的方式啊。我这个问题好像叫什么"dll hell"(dll陷阱)。不过没找到适合的解决方法。
zhou1xp 2010-06-19
  • 打赏
  • 举报
回复
这种需求直接写成COM啊,搞的这么复杂
forcal 2010-06-19
  • 打赏
  • 举报
回复
a1.dll要加载b.dll,会先在当前目录寻找;a2.dll要加载b.dll,也会先在当前目录寻找,故一般没有问题。

实在不行:
1、显式加载b.dll,指定明确的目录。
2、将其中的一个b.dll改为其他名字,如bb.dll。
kfb007 2010-06-09
  • 打赏
  • 举报
回复
请问命名空间怎么搞?
你妹的特盗不 2010-06-08
  • 打赏
  • 举报
回复
搞个命名空间~~
kfb007 2010-06-08
  • 打赏
  • 举报
回复
我知道,可是我的目的是要求a1.dll搜索dll目录1,a2.dll搜索dll目录2
通过LOAD_WITH_ALTERED_SEARCH_PATH能实现吗?我发现是先加载a1.dll则dll目录1的b.dll起效果,否则dll目录2的b.dll起效果
soswaidao 2010-06-08
  • 打赏
  • 举报
回复
一般是先搜索当前目录的

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧