对于隐式调用,是进程的整个运行期;对于显式调用,是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分支!!!