DLL的生命期

对于隐式调用,是进程的整个运行期;对于显式调用,是LoadLibrary和FreeLibrary之间。

验证方法,查看进程何时进入DllMain中的DLL_PROCESS_DETACH分支

附:DllMain各分支的含义:

BOOL WINAPI DLLMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID fImpLoad)
{ 
  Switch(fdwReason){
  case DLL_PROCESS_ATTACH:
     //当这个DLL被映射到了进程的地址空间时
     break;
  case DLL_THREAD_ATTACH:
     //一个线程正在被创建
     break;
  case DLL_THREAD_DETACH:
     //线程终结
     break;
  case DLL_PROCESS_DETACH:
     //这个DLL从进程的地址空间中解除映射
     break;
  } 
  return TRUE;
}

千万注意switch中的break,VS生成的dll项目中,默认不带break的,这会导致多次执行DLL_PROCESS_DETACH分支!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值