我有一个 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/