网站大量收购独家精品文档,联系QQ:2885784924

Win32学习材料(本人整理).ppt

  1. 1、本文档共233页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Win32学习材料(本人整理)

Windows进程和线程 2 结束进程 VOID ExitProcess( UINT uExitCode // exit code for all threads ); BOOL TerminateProcess( HANDLE hProcess, // handle to the process UINT uExitCode // exit code for the process ); 3 通过进程ID获取 进程句柄 HANDLE OpenProcess( DWORD dwDesiredAccess, //访问权限 BOOL bInheritHandle, //继承标识 DWORD dwProcessId //进程ID ); 返回进程句柄 Windows进程和线程 4 关闭进程句柄 CloseHandle 5 进程间的等候 等候 可等候的句柄 的信号 DWORD WaitForSingleObject( HANDLE hHandle, //句柄 DWORD dwMilliseconds //等候时间 INFINITE ); 阻塞函数,等候句柄的信号,只在句柄有信号或超出等候时间,才会结束等候。 Windows进程和线程 Windows线程 Windows线程是可以执行的代码的实例。系统是以线程为单位调度程序。一个程序当中可以有多个线程,实现多任务的处理。 Windows线程的特点: 1)线程都具有1个ID 2)线程具有自己的安全属性 3)每个线程都具有自己的内存栈 4)每个线程都具有自己的寄存器信息 进程多任务和线程多任务: 进程多任务是每个进程都使用私有地址空间, 线程多任务是进程内的多个线程使用同一个地址空间。 线程的调度: 将CPU的执行时间划分成时间片,依次根据时间片执行不同的线程。 线程轮询:线程A - 线程B - 线程A Windows库程序 3 动态库的使用 3.1 隐式链接(使动态库执行起来的过程不需要程序员负责,过程不明显) 3.2 显式链接(使动态库程序运行起来的过程需要程序员自己负责) 4 动态库的函数 4.1 实现动态库的函数 4.2 库函数的导出 1) 声明导出 使用 _declspec(dllexport) 在函数定义前面,导出函数 注意:动态库编译链接后,也会有LIB文件,是作为动态库函数映射使用,与静态库不完全相同。 2)模块定义文件 .def 例如: LIBRARY DLLFunc //库 EXPORTS //库导出表 DLL_Mul @1 //导出的函数 DLL_Sub @2 制作动态库 声明到处:_declspec(dllexport)将函数的偏移地址导到了dll的文件头中,如果是C++编译器,dll文件头中记录的是换名之后的函数对应的偏移地址 lib文件记录的仅仅是换名之后的函数名对应的编号 模块定义文件到处:将函数的偏移地址导出到了dll的文件头中,即便C++编译器,dll文件头中记录的是为换名的函数名对应的偏移地址 lib文件中记录的仅仅是未换名的函数名对应的编号 使用动态库: 隐式链接操作系统的加载负责使动态库执行(动态库的首地址) 链接器负责到lib文件中抓函数的编号,程序执行起来后操作 系统加载器负责拿着编号到dll文件中查询函数的偏移地址 显示链接程序员调用LoadLibrary使动态库执行 程序员调用GetProcAddress()函数,在这个函数内部通过函 数名称到dll文件头中查询函数的偏移地址 例如:GetProcAddress(hDll, “CPPdll_add”); Windows库程序 4.3 库函数的使用 4.3.1 隐式链接 1)头文件和函数原型 可以在函数原型的定义前,增加declspec(dllimport), 例如 _declspec(dllimport) int DLL_Add( ... ); 如果库函数使用C格式导出,需要在函数定义增加 extern “C” 2)导入动态库的LIB文件 3)在程序中使用函数 4)隐式链接的情况,DLL可以存放的路径: *(1)与执行文件中同一个目录下推荐使用 (2)当前工作目录 *(3)Windows目录 *(4)Windows/System32目录 *(5)Windows/System (6)环境变量PATH指定目

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档