社区
进程/线程/DLL
帖子详情
多线程中加载DLL 问题
sea_sharka_17
2008-03-18 11:35:12
在多线程里面加载同一个DLL动态库,在每个线程中都使用LoadLibrary来调用同一个动态库,但是,在所有的线程中,HINSTANCE的返回结果都是一样的,动态库中的接口在每个线程中也是一样的;
如果,动态库中的处理时间和周期很长,每个线程中处理的结果都是错误的;
请问在多线程中调用同一个动态库,HINSTANCE的返回值为什么是一样的???
如何解决???
...全文
288
6
打赏
收藏
多线程中加载DLL 问题
在多线程里面加载同一个DLL动态库,在每个线程中都使用LoadLibrary来调用同一个动态库,但是,在所有的线程中,HINSTANCE的返回结果都是一样的,动态库中的接口在每个线程中也是一样的; 如果,动态库中的处理时间和周期很长,每个线程中处理的结果都是错误的; 请问在多线程中调用同一个动态库,HINSTANCE的返回值为什么是一样的??? 如何解决???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cnzdgs
2008-03-18
打赏
举报
回复
HINSTANCE指的是什么?
LoadLibrary的返回值是HMODULE类型,实际上就是dll模块开始的内存地址,dll一旦映射到进程地址空间中,它的地址就是固定的了,所以每次LoadLibrary返回的都是同一个值,除非dll完全释放并再次加载才有可能改变。
snowdot84
2008-03-18
打赏
举报
回复
如果DLL的函数里使用了公有变量,或静态变量,才要考虑同步问题。
其它的就放心使用好了。
jameshooo
2008-03-18
打赏
举报
回复
一个DLL在EXE中只会被加载一次,再次调用LoadLibrary仅仅增加模块句柄的引用计数而已,所以无需每个线程都调用LoadLibrary,可以直接使用句柄,或者用GetModuleHandle来获取已加载DLL的句柄。
而且DLL被加载后,导出符号都已经重定位成功,其它线程可以直接调用这些导出函数,连句柄都不需要了。
但是DLL实现者就要注意了,自己的导出函数在被不同线程调用,所以需要考虑线程同步。
ouyh12345
2008-03-18
打赏
举报
回复
dll里不要使用公有变量和静态变量
如果有的话,注意同步的问题
ouyh12345
2008-03-18
打赏
举报
回复
dll只在第一此加载到进程里,以后的加载,只是增加它的引用次数
看dll的WinMain函数:
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
snowdot84
2008-03-18
打赏
举报
回复
DLL是被加载到进程空间的,LoadLibrary返回的值是 DLL加载到的进程空间地址,所以都是一样的。这和多线程没有关系。
delphi
多线程
调用
dll
delphi
多线程
调用
dll
delphi
多线程
调用
dll
有点复杂
易语言 远程线程注入
DLL
呼出窗口 源码(无模块)
这个可是非常好的源码 没有使用任何模块 放心下载 绝对不留后门,不修改IE,卸载
dll
一直有点小
问题
,希望大家多交流 QQ:22353017
DLL
之
多线程
动态连接库有其自身的优点,如节省内存(例如,多个应用程序可以共享一个
DLL
文件,真正实现了资源"共享",大大缩小了应用程序的执行代码,有效地利用了内存,而且
DLL
文件作为一个单独的程序模块,封装性、独立性好,有利于提高软件开发和维护的效率。)、支持多语种等功能,而且,当
DLL
中
的函数改变后,只要不是参数的改变,调用函数并不需要重新编译。 Non-MFC
DLL
:指的是不用MFC的类库结构,直接用
DLL
的
多线程
VC++动态链接库编程之
多线程
在
DLL
中
可以处理
多线程
,WIN32对于
多线程
的支持是操作系统本身提供的一种能力,并不在于用户编写的是哪一类程序。即便是一个控制台程序,我们都可以使用
多线程
: #include #include void ThreadFun(void) { while(1) { printf( "this is new thread/n" ); Sleep( 100
Java
多线程
调用 C++
dll
前段时间到一个公司工作。在工作期间,需要给公司解决一个java调用
dll
的
问题
,该公司以前的java掉用
dll
存在一个
多线程
的
问题
。经过一天多的思考和分析。得出解决办法。以下是我对这个
问题
的一些想法。 1。 该
dll
中
定义了许多全局变量,并且每回要调用
dll
时都要根据调用端的情况来初始化这些全局变量。所以当
多线程
调用时,就会出现数据混乱。因为全局变量在一个进程
中
是共享的。
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章