加载dll的问题!火急!

bigysw 2006-09-04 01:58:22
同一个进程中:

HINSTANCE h1 = LoadLibrary("abc.dll");
HINSTANCE h2 = LoadLibrary("abc.dll");

返回的h1 和 h2 值有时候一样,有时候不一样,啥原因?
...全文
246 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
controstr 2006-09-04
  • 打赏
  • 举报
回复
没有注意过这个问题,只要能正常调用行了
柯本 2006-09-04
  • 打赏
  • 举报
回复
我说的是在winnt内核的情况下(win2000/xp/2003等)
系统会给每个进程分配2G内存(注意:boot.ini中可用/3G或/PGA改变用户可用内存)及相应的"资源",而这个内存/资源是虚拟的,所以两个程序之间是不影响的
我作过测试,在同一程序及不同程序用LoadLibrary("abc.dll");它返回的handle(HINSTANCE是相同的),即使在不同的机器上也相同(我都是win2k系统),且与dll无关,第一个都为0x10000000,而加载第二个dll时为0x00F30000(第二个可能会变)
我在delphi中作测试,结果相同,第一个为0x10000000
同样,在vc/gcc中,第一个加载的dll的hadnle都是0x10000000
我的测试结果,只有在加载二个以上dll时,handle才会不同



zwh202342 2006-09-04
  • 打赏
  • 举报
回复
加载同一个的时候应该是相同的,但也和同事运行的程序有关系吧,如果没有内存可用了呢?
truelove7283159 2006-09-04
  • 打赏
  • 举报
回复
up
netliuming 2006-09-04
  • 打赏
  • 举报
回复
还真从来没注意过。。。。我觉得在同一进程中理论上应该相同。
bigysw 2006-09-04
  • 打赏
  • 举报
回复
“而这个handle是由系统在你的进程序中分配的,如果你在进程中只调用了同一LoadLibrary("abc.dll");(不论多次)它理论上应该相同”

我觉得他们应该理论上是不同的吧?
柯本 2006-09-04
  • 打赏
  • 举报
回复
HINSTANCE LoadLibrary(
LPCTSTR lpLibFileName // address of filename of executable module
);
If the function succeeds, the return value is a handle to the module.
而这个handle是由系统在你的进程序中分配的,如果你在进程中只调用了同一LoadLibrary("abc.dll");(不论多次)它理论上应该相同,如果在你LoadLibrary("abc.dll");之前调用了其它LoadLibrary("xxx.dll");,那得到的handle当然不同了(前一个handle已被xxx.dll占用)

返回值不同对你有影响吗?
BlueDeepOcean 2006-09-04
  • 打赏
  • 举报
回复
对于多线程操作,属于CPU的频分/时分操作,也就是将CPU的处理时间分成若干份分别处理这两个线程的各自部分,可能这其中存在一个线程读出/写入DLL内容,而另一个也进行处理,读出/写入操作,因此导致DLL的值变化。
bigysw 2006-09-04
  • 打赏
  • 举报
回复
在同一个事件函数中,他们就是相等的。
我分成两个线程,分别LoadLibrary("abc.dll");他们返回的句柄也是相同的。郁闷......
BlueDeepOcean 2006-09-04
  • 打赏
  • 举报
回复
??
如果将你两次访问同一个DLL的过程写入一个事件中,是否结果仍然不同呢?
bigysw 2006-09-04
  • 打赏
  • 举报
回复
理论上应该是不一样的,对吧?
BlueDeepOcean 2006-09-04
  • 打赏
  • 举报
回复
可能在不同线程中向你那个dll中写入或读出的值不一样。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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