欢迎光临
我们一直在努力

我怎么知道加载我的DLL即将退出的.exe。

本站教程收集整理的这篇文章主要介绍了我怎么知道加载我的DLL即将退出的.exe。,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个dll,这实际上是一个COM服务注册,然后由另一个.exe进程加载。 我想当用户退出.exe执行一些资源closures步骤从我的DLL之前,为时已晚。 我尝试从我的DLL的DllMain拦截DLLPROCESSDETACH或DLLTHREADDETACH,但似乎当它到达那里,已经太迟,因为我的DLL(我需要执行closures的步骤)已经停止的线程开始? 当然,我不控制.exe代码,否则我会从那里调用执行那些干净的closures步骤,然后退出。 我只能在DLL本身上工作。 它似乎并没有调用DllCanUnloadNow或DllUnregisterServer。

有没有人为这种情况工作?

提前感谢您的任何投入。

自动退出Telnet命令返回提示,无需人工干预^]退出closures退出码1

执行asynchronousI / O操作时退出

如何避免在C中的我的容器服务器的用户定义库程序中的“退出”?

终止应用程序并调用本地对象的析构函数

是否有可能在线程中使用退出?

exit()和exit_group()有什么区别

C ++ Windows:如何closures控制台窗口?

程序退出状态

在UNIX(或LINUX)中退出并等待函数

exit()vs _exit():调用_exit()是否确保closures所有打开的fd和套接字?

你可以用dtor写一个静态对象,当服务正在退出,cruntime即将卸载时,dtor将被调用。

struct CDtorMyDll { ~CDtorMyDll { // do cleanup stuff here. } }; static CDtorMyDll dtorMyDll;

愚蠢的问题:为什么你需要运行你创建的线程? 无论如何它们将被销毁,并且清理所有流程使用的资源。

话虽如此,如果您的对象确实是一个COM对象,您可以添加代码到您的DllCanUnloadNow调用来检测是否有任何未完成的对象的实例,如果没有,清理您的资源。 如果进程泄漏对象的引用或不调用CoUninitialize,这将不起作用,但是如果托管对象的进程遵循规则,那么在进程关闭之前,您将有机会进行清理。

试图通过DllMain或析构函数来做到这一点会导致怪异的,因为DLL本身将处于一个奇怪的状态(阅读所有雷蒙德陈关于DllMain的文章,你会看到)。

真正的解决方案是在进程退出之前调用明确的MyDllInitialize()和MyDllTeardown()函数。

本站总结

以上是本站教程为你收集整理的我怎么知道加载我的DLL即将退出的.exe。全部内容,希望文章能够帮你解决我怎么知道加载我的DLL即将退出的.exe。所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络香港vps收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。