对于在一个进程中多次LoadLibrary同一个dll的疑问

linvoc 2002-11-05 09:54:15
我的一个应用程序中用于
HINSTANCE h1,h2;
h1 = LoadLibrary("mydll.dll");
h2 = LoadLibrary("mydll.dll");
从调试来看,h1,h2的值是一样的。根据微软的动态链接库技术,当一个dll被装载进内存后,其他进程或线程再次装载该dll,得到的HINSTANCE指针是相同的。是不是这样呢?但我如果希望h1,h2不相同,即mydll.dll中的类实例可以被初始化两次,该怎么做呢?
...全文
643 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mightyjiang 2002-11-18
  • 打赏
  • 举报
回复
两次LoadLibrary后h1和h2是相同的
invalid 2002-11-05
  • 打赏
  • 举报
回复
两次LoadLibray是相同的!我写的dll是这样的。
碰到的问题跟linvoc (Volcano) 也一样。
我是这么解决的:
在调用者保存类初始化实例。
调用dll中的函数时作为参数传入。
比较麻烦。
mynameis007 2002-11-05
  • 打赏
  • 举报
回复
两次LoadLibrary后h1和h2是不同的.不信你单步执行看看啊.
毕加索的画 2002-11-05
  • 打赏
  • 举报
回复
有一个LoadLibrary就一定要有一个FreeLibrary,
配对使用,因为在LoadLibrary中会给dll的引用计数加1,
所以要用FreeLibrary来给dll的引用计数减1,否则dll所占用的资源可能不会被释放。
Iamme 2002-11-05
  • 打赏
  • 举报
回复
看看
Behard 2002-11-05
  • 打赏
  • 举报
回复
Remarks
....
If the module is a DLL not already mapped for the calling process, the system calls the DLL's DllEntryPoint function with the DLL_PROCESS_ATTACH value. If the DLL's entry-point function does not return TRUE, LoadLibrary fails and returns NULL.
.....
调用 LoadLibrary 后在没有调用 FreeLibrary 前,再次调用 LoadLibrary 不会进入 DLL_PROCESS_ATTACH ,也就是不会再次实例化
Behard 2002-11-05
  • 打赏
  • 举报
回复
你在调用
函数后再确定是否初始化不就行了吗
linvoc 2002-11-05
  • 打赏
  • 举报
回复
唉呀,怎么给分呢?
linvoc 2002-11-05
  • 打赏
  • 举报
回复
看来我也要这样做了,加上一个index,每一次调用用不同的index来区分。谢谢

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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