DLL程序入口点函数:DllMain,注意:大小写是区别的(仅导出资源的DLL可以没有DllMain函数)。

函数原型:

BOOL APIENTRY DllMain( HMODULE hModule,  DWORD  ul_reason_for_call,  LPVOID lpReserved  )
{  return TRUE;
}

参数意义:

①hModule参数:指向DLL本身的实例句柄;

②ul_reason_for_call参数:指明了DLL被调用的原因,可以有以下4个取值:

  1. DLL_PROCESS_ATTACH:
    当DLL被进程 <<第一次>> 调用时,导致DllMain函数被调用,

同时ul_reason_for_call的值为DLL_PROCESS_ATTACH,

如果同一个进程后来再次调用此DLL时,操作系统只会增加DLL的使用次数,

不会再用DLL_PROCESS_ATTACH调用DLL的DllMain函数。

2.DLL_PROCESS_DETACH:
当DLL被从进程的地址空间解除映射时,系统调用了它的DllMain,传递的ul_reason_for_call值是DLL_PROCESS_DETACH。
★如果进程的终结是因为调用了TerminateProcess,系统就不会用DLL_PROCESS_DETACH来调用DLL的DllMain函数。这就意味着DLL在进程结束前没有机会执行任何清理工作。

3.DLL_THREAD_ATTACH:
当进程创建一线程时,系统查看当前映射到进程地址空间中的所有DLL文件映像,

并用值DLL_THREAD_ATTACH调用DLL的DllMain函数。

新创建的线程负责执行这次的DLL的DllMain函数,

只有当所有的DLL都处理完这一通知后,系统才允许线程开始执行它的线程函数。

4.DLL_THREAD_DETACH:
如果线程调用了ExitThread来结束线程(线程函数返回时,系统也会自动调用ExitThread),

系统查看当前映射到进程空间中的所有DLL文件映像,

并用DLL_THREAD_DETACH来调用DllMain函数,

通知所有的DLL去执行线程级的清理工作。
★注意:如果线程的结束是因为系统中的一个线程调用了TerminateThread,

系统就不会用值DLL_THREAD_DETACH来调用所有DLL的DllMain函数。

③lpReserved参数:保留,目前没什么意义。

Dll入口函数参数详解相关推荐

  1. PHP date函数参数详解

    PHP date函数参数详解 作者: 字体:[增加 减小] 类型:转载 time()在PHP中是得到一个数字,这个数字表示从1970-01-01到现在共走了多少秒,很奇怪吧  不过这样方便计算, 要找 ...

  2. java调用js匿名函数参数,js匿名函数作为函数参数详解

    由衷的感叹,js真是烦. 学到现在,渐渐理解了什么是:语言都是通用的,没有好不好,只有擅长不擅长. 继承,多态,甚至指针,c能实现,c++,java有,javascript(和java是雷锋和雷峰塔的 ...

  3. matlab melbankm,Matlab v_melbankm函数参数详解(英文附例)

    Matlab v_melbankm函数参数详解(英文附例) 笔者使用的是R2019的matlab,下载了voicebox安装至matlab路径下即可使用.下载voicebox请参看此博客 需要注意的是 ...

  4. ioctl 函数 参数 详解

    2019独角兽企业重金招聘Python工程师标准>>> ioctl 函数 参数 详解 2009-04-24 11:55 ioctl函数 本函数影响由fd参数引用的一个打开的文件. # ...

  5. 定义一个没有参数的函数、输出python3次_Python函数参数详解,三天让你掌握python,不再是小白

    原标题:Python函数参数详解,三天让你掌握python,不再是小白 引言 随着程序功能的增多,代码量随之增大,此时仍不加区分地把所有功能的实现代码放到一起,将会使得程序的组织结构不清晰,可读性变差 ...

  6. Matlab mfcc函数参数详解(英文附例)

    Matlab mfcc函数参数详解 其实可以直接打开源代码看哈. %MFCC Extract the mfcc, log-energy, delta, and delta-delta of audio ...

  7. python传入参数加星号_Python 带星号(* 或 **)的函数参数详解

    1. 带默认值的参数 在了解带星号(*)的参数之前,先看下带有默认值的参数,函数定义如下: >> def defaultValueArgs(common, defaultStr = &qu ...

  8. Matlab v_melcepst函数参数详解(英文附例)

    Matlab v_melcepst函数参数详解(英文附例) 笔者使用的是R2019的matlab,下载了voicebox安装至matlab路径下即可使用.下载voicebox请参看此博客 需要注意的是 ...

  9. python中def func是什么意思_Python的函数参数详解

    原标题:Python的函数参数详解 前言 Python中函数的参数可以分为两大类形参和实参~ def func(x, y): # x, y 就是形参 print(x, y) func(2, 3) # ...

最新文章

  1. 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试...
  2. 案例开发分析 || ​​​​​​​Scheduler组件
  3. 云计算炒作多过采纳 普及仍需时日
  4. java 安卓界面 可视化_Monkey可视化工具开发(android篇)
  5. angular4输入有效性_Angular 2 用户输入
  6. vba 判断是否为数字
  7. linux socket recv函数如何判断收完一包_linux服务器端编程之高性能服务器架构设计总结...
  8. [水池] 灌水专用:搜狗输入法里收集的纯文字表情
  9. Linux文本三剑客超详细教程---grep、sed、awk
  10. IT要发掘有价值应用
  11. 通过ICE轻松部署WES7镜像
  12. 扫地机器人半湿拖布_自己洗拖布的云鲸扫拖机器人,让“懒人”离彻底解放双手又近一步...
  13. 蓝桥杯Python题目(二)
  14. word批量转PDF
  15. Sky Walking 介绍 及 8.7.0 源码学习环境搭建
  16. 排序算法--鸽巢排序(PigeonholeSort)的原理、排序思路、适用场景及代码示例
  17. IOS免签支持在线封装app分发源码 免签封装带绿标
  18. CUDA的Occupancy和Achieved Occupancy概念
  19. mybatis like的两种写法
  20. Mysql、Oracle、DM、Tbase数据库差异性

热门文章

  1. 实现输入一个字符串,分别将大写字母、小写字母、数字、其他字符存到列表里面并且输出列表
  2. java redis 没密码配置_如何解决redis的NOAUTH Authentication required异常
  3. C语言学习之试编程从键盘输入2*3的二维数组,将该数组行列交换输出。
  4. 计算机技术是双证,计算机技术在职研究生单证可以转双证吗
  5. 2012届华为校园招聘机试题
  6. 2006年清华大学计算机研究生机试真题
  7. const_cast的应用
  8. Linux:hping高级主机扫描
  9. (转)c#中const与readonly区别
  10. mysql数据库的系统操作基本操作