社区
进程/线程/DLL
帖子详情
如何正确的卸载DLL?
PDD123
2008-06-10 01:56:08
我写了一个DLL,在载入此DLL的同时会打开一个子线程(子线程的程序在此DLL中),此子线程一直要到此DLL卸载的时候才结束。
卸载此DLL之后,进程继续运行。
我卸载DLL的时候总是出错,最后检查下来估计是在卸载DLL的时候,那线程还在运行导致的。
我是用FreeLibrary卸载DLL。
在调用FreeLibrary之前,无法关闭子线程。
请问,用什么办法可以正确的卸载此DLL麽?
编程环境是:VC++.NET 2003
建立的dll项目是:MFC DLL
...全文
720
10
打赏
收藏
如何正确的卸载DLL?
我写了一个DLL,在载入此DLL的同时会打开一个子线程(子线程的程序在此DLL中),此子线程一直要到此DLL卸载的时候才结束。 卸载此DLL之后,进程继续运行。 我卸载DLL的时候总是出错,最后检查下来估计是在卸载DLL的时候,那线程还在运行导致的。 我是用FreeLibrary卸载DLL。 在调用FreeLibrary之前,无法关闭子线程。 请问,用什么办法可以正确的卸载此DLL麽? 编程环境是:VC++.NET 2003 建立的dll项目是:MFC DLL
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
PDD123
2008-06-11
打赏
举报
回复
你们说的都有道理,但是还是没有解决我的问题,我的问题是在卸载DLL的时候向子线程中用DoModal()打开的窗口发送WM_CLOSE消息时关闭不了那窗口。只要那窗口关闭了,线程就结束了。
rmb369
2008-06-10
打赏
举报
回复
设一个全局变量,假如为0表示线程运行,为1表示线程退出。FreeLibrary会调用DllMain函数,通知码是DLL_PROCESS_DETACH。在这个通知码中将全局变量设为1。然后用WaitForSingleObject等待线程对象的句柄。在线程中循环检测该全局变量值,当它为1时线程退出。这时WaitForSingleObject返回,然后DllMain返回,FreeLibrary返回,Dll才被卸载。
volatile ULONG g_lFlag=0;
HANDLE g_hThread=NULL;
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
UINT nThreadId;
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
g_lFlag=0;
g_hThread=_beginthreadex(NULL,0,ThreadFunc,NULL,0,&nThreadId);
break;
......
case DLL_PROCESS_DETACH:
g_lFlag=1;
WaitForSingleObject(g_hThread,INFINITE);
CloseHandle(g_hThread);
g_hThread=NULL;
g_lFlag=0;
break;
}
return TRUE;
}
UINT WINAPI ThreadFunc(PVOID pvParam)
{
......
while(g_lFlag!=1)
{
......
}
......
return 0;
}
buyong
2008-06-10
打赏
举报
回复
结束前进到那个线程里,直接PostQuitMessage行不行?
PDD123
2008-06-10
打赏
举报
回复
啊,太没有天理了,从其他进程里发消息给那个窗口,也可以关闭,就是卸载DLL的时候发消息关闭不了。
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
PDD123
2008-06-10
打赏
举报
回复
...子线程中打开了一个窗口,我向窗口发送WM_CLOSE消息了,窗口也接收到这个消息了,但是就是不会关闭,怪,郁闷。
直接点窗口上边的叉,窗口也是接收到一个WM_CLOSE消息,但是为什么直接点上边的叉能关闭,卸载DLL的时候向窗口发送WM_CLOSE消息就关闭不了呢?
na_he
2008-06-10
打赏
举报
回复
DLL在中导出一个接口,该接口用来停止thread乐,FreeLibrary之前,调用该接口了.
不过呢,强行的结束thread会导致一些资源无法释放掉.
cnzdgs
2008-06-10
打赏
举报
回复
线程在使用DLL为何还要卸载?
DarknessTM
2008-06-10
打赏
举报
回复
一般是先给子线程一个消息,让他准备退出
然后卸载线程等待子线程退出 WaitForSingleObject
最后卸载
ouyh12345
2008-06-10
打赏
举报
回复
在线程里,做成一个循环,然后每个耗时的工作完成后,都要检查一下,是否需要退出
ouyh12345
2008-06-10
打赏
举报
回复
不能通知子线程?
unload_
dll
:从正在运行的进程中
卸载
DLL
。-开源
unload_
dll
是Windows的实用程序,可让您从正在运行的进程中
卸载
DLL
。 如果要
卸载
的应用程序将自身挂接到其他进程中,但无法
正确
卸载
,则此功能很有用。
api-ms-win-core-libraryloader-l1-2-0.
dll
文件
api-ms-win-core-libraryloader-l1-2-0.
dll
文件是Windows操作系统的核心动态链接库之一,它提供了与加载和
卸载
动态链接库(
DLL
)相关的函数和功能。 该
DLL
文件包含了一些与库加载和管理相关的函数,例如LoadLibrary、FreeLibrary、GetProcAddress等。这些函数允许程序在运行时动态加载和
卸载
其他
DLL
文件,并获取其中导出函数的地址进行调用。 在Windows系统中,许多应用程序和系统组件都依赖于这个
DLL
文件来
正确
加载和管理其他
DLL
文件。它提供了操作系统级别的函数接口,使得应用程序能够方便地加载和使用其他模块提供的功能。 因此,api-ms-win-core-libraryloader-l1-2-0.
dll
文件在Windows系统中扮演着重要的角色,确保了动态链接库的
正确
加载和使用,为应用程序提供了灵活性和可扩展性。
NDISDriverInst:在Windows上安装
卸载
NDIS驱动程序的库
NDISDriverInst 在Windows上安装/
卸载
NDIS驱动程序的库。 特征 该库基于WDK示例bindview,它是一个基于对话框的可执行程序。 您可以使用它来安装/
卸载
驱动程序并查询其安装状态。 建造 我使用WDK7600.16385.1 xp fre / chk环境构建它。 提供静态(默认)和动态库构建。 如果要构建动态库(
dll
),请将文件“ sources_dynamic”重命名为“ sources”,然后进行构建。 它们都有调试和发行版本。 调试版本的库名称中带有_d标志。 我已将TARGETPATH更改为“ Lib”,因此您将在“ Lib”文件夹中获得您的库。 用法 您只需要包含NDISDriverInst.h并将库二进制文件复制到
正确
的文件夹即可。 默认情况下,您将使用静态库。 如果要使用动态库(
dll
),则应在包含标头之前定义宏NDIS_INST_IMPOR
易语言-网络拦截支持库1.1#6版
易语言eNetIntercept.fne支持库中文名为易语言网络拦截支持库,本易语言支持库在Win9x/ME/NT/2000/XP环境下实现了对WinSock2的函数拦截 (包括如下函数:socket/closesocket/bind/listen/connect/accept/send/sendto/recv/recvfrom)。 系统中任何程序使用WinSock2的函数都会被本支持库所拦截,并使用易语言事件触发的方式处理,您可以在被触发的事件中按照相应事件的规则自由的处理其他程序的WinSock调用。如果您对WinSock或Windows网络编程不是很了解,建议您在使用本支持库前阅读WinSock等其他相关文档或教程。注意:在使用本支持库前,您必须先
正确
安装网络服务提供者(ESPINN.
dll
(NN为当前版本))文件。网络服务提供者(ESPINN.
dll
(NN为当前版本))文件必须是随本支持库一起附带的网络服务提供者(ESPINN.
dll
(NN为当前版本)),否则安装将失败。当前本支持库对应的网络服务提供者版本是1.1。安装方法:使用"网络服务安装"中的"安装"命令(注意该命令的参数一定要填写
正确
)。
卸载
方法:首先您必须确定系统中和本支持库类似的拦截/过滤软件已
正确
卸载
或没有
卸载
,否则请千万不要使用
卸载
方法!使用"网络服务安装"中的"
卸载
"命令,如果本方法没有执行成功,请千万不要删除已成功安装到系统路径下的网络服务提供者(ESPINN.
dll
(NN为当前版本))文件,原因请见下列警告。 [ 警告 ]如果网络服务提供者(ESPINN.
dll
(NN为当前版本))已经安装成功,并且"
卸载
"命令没有成功执行,(注意:只有"
卸载
"命令返回"真"才代表真正成功
卸载
了),或根本没有使用"
卸载
"命令,系统路径下的网络服务提供者(ESPINN.
dll
(NN为当前版本))文件不可以改名、删除或移动路径,否则很有可能导致整个系统的WinSock瘫痪。如果上述情况真的发生了也不要紧,您可以将随本支持库附带的网络服务提供者(ESPINN.
dll
(NN为当前版本))文件再次复制到系统路径中(推荐使用此方法,因为后面的方法在些特定情况下可能不保险),或者直接执行"
卸载
"命令,并确定该命令是执行成功了。 易语言eNetIntercept.fne支持库为一般支持库,需要易语言系统3.7版本的支持,需要易语言系统核心支持库3.7版本的支持,提供了6种库定义数据类型,提供了37种命令。 操作系统需求: Windows 易语言官方论坛
xproxy代理
XProxy.
dll
: core assembly of the XProxy. XP.exe: config tool, application, service. Proxy.xml: configuration files. XProxy.
dll
是核心程序集,XP.exe是配置管理工具,同时也是服务程序,XLog.
dll
是必须的日志组件。 运行XP.exe,增加监听器,并在右边配置一些信息,其中插件是必选项,内置的插件有:NAT插件、加密插件、反向代理、直接代理、间接代理。 配置好以后,不要忘了点击保存。配置信息附带在Proxy.xml文件中,也可手工编辑改文件。 具体配置方法,请参考附带的Proxy.xml文件。 安装和
卸载
是指安装为服务或
卸载
服务,注意:每台计算机只能安装一个XProxy服务。 启动和停止表示启动服务或停止服务。 测试是指直接根据配置信息启动多个监听服务工作,该功能可测试配置是否
正确
,并能及时看到测试信息。
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章