卸载DLL 很多人是从外部卸载的,但是可能会造成程序的崩溃和异常,需要卸载的方式最好是放在内部操作。
通过执行DLL内部方法去卸载DLL本身,代码如下:
VOID unDll()
{
HMODULE hmodel = NULL;
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,(LPCSTR) &unDll, &hmodel);
if (hmodel!=0)
{
FreeLibrary(hmodel);
FreeLibraryAndExitThread(hmodel,0);
}
}
DLL自身调用该方法或者外部调用该方法,都可以将DLL从内存中卸载。
调用该方法前必须要将其他所有的线程终止掉才能不出现异常,终止线程代码:
所以需要被终止的线程,它的句柄不可以提前关闭,可以统一最后结束
typedef enum _THREADINFOCLASS {
ThreadBasicInformation,
ThreadTimes,
ThreadPriority,
ThreadBasePriority,
ThreadAffinityMask,
ThreadImpersonationToken,
ThreadDescriptorTableEntry,
ThreadEnableAlignmentFaultFixup,
ThreadEventPair_Reusable,
ThreadQuerySetWin32StartAddress,
ThreadZeroTlsCell,
ThreadPerformanceCount,
ThreadAmILas