windows - 我怎么知道加载我的 dll 的 .exe 即将退出?

标签 windows com dll exit

我有一个 dll,它实际上是一个已注册的 com 服务,然后由另一个 .exe 进程加载。我希望当用户从 .exe 退出时在为时已晚之前从我的 dll 中执行一些资源关闭步骤。我试图从我的 DLL 的 DllMain 中拦截 DLLPROCESSDETACH 或 DLLTHREADDETACH,但似乎当它到达那里时,已经太晚了,因为由我的 DLL 启动的线程(我需要执行关闭步骤)已经停止了?!当然,我不控制 .exe 代码,否则我会在它退出之前从那里调用一个调用来执行那些干净的关闭步骤。我只能处理 DLL 本身。 DllCanUnloadNow 或 DllUnregisterServer 似乎都没有被调用。

有人可以解决这种情况吗?

提前感谢您的任何意见。

最佳答案

你可以用dtor写一个静态对象,一旦服务退出,cruntime即将卸载,dtor就会被调用。

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

static CDtorMyDll dtorMyDll;

关于windows - 我怎么知道加载我的 dll 的 .exe 即将退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1585310/

相关文章:

windows - 如何在 Vista 中从网络共享运行批处理文件而不出现警告对话框?

python - 如何在 Tkinter 中制作非方形边缘?

c++ - 为什么我的 COM 智能指针在从方法返回时被删除

C++组件对象模型

windows - 在设备管理器中重置设备

c++ - 通过适配器描述更改 Mac 地址

Python - 显示 COM 对象

c++ - CoCreateInstance 在 Release 中工作得很好,但在调试中没有

java - 在 jboss 服务器上加载 DLL

.net - 如何在Delphi中使用.Net程序集而不在GAC或COM中注册它?