看流星社区

 找回密码
 注册账号
查看: 1841|回复: 0

VC Dll 入口函数源码

[复制链接]

该用户从未签到

发表于 2013-5-10 20:03:59 | 显示全部楼层 |阅读模式
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函数关闭进程
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-14 07:51

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表