Dll 入口函数

代码

BOOL WINAPI DllMain ( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved )
{
    // 分别处理各种通知
    switch( fdwReason ) 
    { 
    
case DLL_PROCESS_ATTACH:
            
// 为新进程初始化,只能进行1次
            
// 如果加载失败则返回FALSE
            MessageBox(0, TEXT("DLL_PROCESS_ATTACH"), TEXT(""), MB_OK);
            
break;
        
case DLL_THREAD_ATTACH:
       ::MessageBox(
0, TEXT("DLL_THREAD_ATTACH"), TEXT(""), MB_OK);
            
// 执行线程初始化操作
            break;
        
case DLL_THREAD_DETACH:
       ::MessageBox(
0, TEXT("DLL_THREAD_DETACH"), TEXT(""), MB_OK);
            
// 执行线程清理操作
            break;
        
case DLL_PROCESS_DETACH:
            
// 执行清理操作
       ::MessageBox(0, TEXT("DLL_PROCESS_DETACH"), TEXT(""), MB_OK);
           
break;
    }
    
return TRUE;
}

俩个测试代码

DWORD WINAPI MyThreadFunc(LPVOID p)
{
    
return 0;
}


void CDllMainDlg::OnBnClickedButton1()
{
    
// TODO: 在此添加控件通知处理程序代码
    HMODULE h;
    h 
= LoadLibrary(TEXT("DLLSample.dll"));

    DWORD ThreadId;
    CloseHandle(CreateThread(NULL, 
0&MyThreadFunc, NULL, 0&ThreadId));
    
//FreeLibrary(h);
}

void CDllMainDlg::OnBnClickedButton2()
{
    
// TODO: 在此添加控件通知处理程序代码
    DWORD ThreadId;
    CloseHandle(CreateThread(NULL, 
0&MyThreadFunc, NULL, 0&ThreadId));
}

 

DLL_PROCESS_ATTACH 进程第一次加载DLL时会触发

DLL_PROCESS_DETACH   1  进程已经加载DLL 2 进程卸载DLL(包括进程关闭) 3 非使用TerminateProcess 函数关闭进程

DLL_THREAD_DETACH   1 进程已经加载DLL 2 创建新线程

DLL_THREAD_DETACH   1  进程已经加载DLL 2 ExitThread撤消线程 3 非使用TerminateThread函数关闭进程

本来DELPHI也可以这样使用的,但是一直没找到我想到的结果

原文地址:https://www.cnblogs.com/chengxin1982/p/1747748.html