单进程加载同名dll问题

睡在床板下_ 2009-01-09 01:12:24
有一个关于单进程加载dll的问题,请教大家:

有两个公司提供了两个开发包,A和B.
A中有两个库名叫Main_A.dll,Fun_C.dll .
B中有两个库名叫Main_B.dll, Fun_C.dll 。
A和B都有个Fun_C.dll 但版本不同。

由于我首先加载A厂商,所以进程中首先存在A版本的Fun_C.dll ,
之后加载B厂商时就没有加载B的Fun_C.dll,导致在使用B时调用了A的Fun_C.dll,程序出现异常。

这样的问题该如何解决呢?谢谢
...全文
1045 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengzhe 2010-01-05
  • 打赏
  • 举报
回复
绝对路径加载 没问题
wangshibo429 2009-05-11
  • 打赏
  • 举报
回复
请问有没有解决该问题?
sunlin7 2009-01-16
  • 打赏
  • 举报
回复
在调用A或B任何前以绝对路径加载dll。
wocow3 2009-01-13
  • 打赏
  • 举报
回复
分别动态加载
分别GetProcAddress
oyljerry 2009-01-13
  • 打赏
  • 举报
回复
Fun_C.dll用不同的路径
睡在床板下_ 2009-01-13
  • 打赏
  • 举报
回复
我已经分别动态加载了。

所以当动态加载B时,发现进程中存在了A的Fun_C.dll,所以程序会成功,但却不会加载B的Fun_C.dll到进程中
pomelowu 2009-01-13
  • 打赏
  • 举报
回复
This differs from Win16, where once a DLL was loaded, no other DLL with the same name could be loaded. Win16 only retained the 8 character name of the DLL to identify whether it was loaded or not. Win32 uses the entire path and file name to identify DLLs, so two DLLs with the same name, but in different folders, can be loaded by a single process. Also, Win32 does not skip the search if other applications have loaded the DLL. It always searches, using these rules.

用绝对路径动态加载dll
Holly 2009-01-13
  • 打赏
  • 举报
回复
典型的DLL Hell陷阱问题!
动态加载也没有用的,Windows系统认为Fun_C.DLL是同一个,不会加载两个同名的DLL到同一个进程。
如果不改善你的A和B似乎没有直接的办法。

需要回避这两个开发库在同一个进程的使用,将两个开发库的功能独立到两个不同的进程,在各自的进程中加载各自路径下的DLL。
wocow3 2009-01-09
  • 打赏
  • 举报
回复
分别动态加载

15,471

社区成员

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

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