- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第13章 高级应用 13.1 动态链接库 13.1.1 静态链接库和动态链接库 1.静态链接库和动态链接库的比较 2.动态链接库与进程的关系 3.动态链接库与静态链接库的加载原理 当使用了动态链接库的应用程序加载后,首先它根据加载到项目中的lib文件提供的dll文件名信息找到dll文件。系统搜索dll文件允许有一定的顺序,该顺序定义如下: (1) 包含exe文件的目录。 (2) 进程的当前目录。 (3) Windows目录。 (4) Windows系统目录。 (5) Path环境变量列出的目录。 4.使用静态链接库或动态链接库的方法 使用静态链接库或者动态链接库的方法包括以下三种: (1) 在程序使用库函数的文件中,包含含有库函数声明的头文件。一般把这些头文件包含在StdAfx.h标准预编译头文件中。 (2) 把对应的库文件(*.lib)加入到项目中;在VC++集成开发环境中,AppWizard可以把这些文件自动加入到项目中。 (3) 如果是动态链接库,需把对应的DLL文件(*.dll)放在系统目录下。此工作也可以由AppWizard完成。 13.1.2 MFC动态链接库 (1) 多个应用程序共享代码和数据。 (2) 在调用子程序(HOOK)过滤系统消息时必须使用动态链接库。 (3) 设备驱动程序必须是动态链接库。 (4) 如果要在对话框编辑器中使用自己定义的控件,则必须使用动态链接库。 (5) 动态链接库以一种自然的方式,将一个大的应用程序划分为几个小的模块,有利于小组内部成员的分工与合作。 (6) 为了实现应用程序的国际化,往往需要使用动态链接库。 表13-1说明了二者的区别与联系。 13.2 多任务 13.2.1 创建进程 该函数的原型如下: BOOL CreateProcess (LPCSTR lpAppName, LPCSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartInfo, LPPROCESS_INFORMATION lpPInfo); 其中,各参数的说明如下: l?? lpAppName:定义执行模块的文件名。如果定义为 NULL,那么lpCommandLine指向字符串的第一个记号应作为程序名来使用。 l??? lpCommandLine:定义可执行模块的命令行。如果此参数为NULL,则lpAppName指向的串作为命令行参数。 l?? lpProcessAttributes:定义了新进程的安全属性。如果该参数为NULL,则建立的进程具有默认的安全属性。 l? lpThreadAttributes:定义了新进程的原线程的安全属性。如果该参数为NULL,则建立一个具有默认的安全描述符的原线程。 bInheritHandles:指明创建进程时所用的句柄是否被新进程继承。 l? dwCreationFlags:定义某种附加的影响新进程的创建方式。这个参数也控制新进程的优先权类,该参数一般为 NULL。 l?? lpEnvironment:指向新进程环境块的指针。若该参数为NULL,则新进程使用调用进程的环境。 l? lpCurrentDirectory:指定子进程的当前驱动器号和目录。若该参数为NULL,新进程具有与调用进程同样的驱动器号和目录。 l? lpStartInfo:指向决定新进程主窗口外观形状信息的STARTUPINFO结构。 l? lpPInfo:指向接受关于新进程标识信息的PROCESS INFORMATION结构。 被创建好的新进程在很大程度上独立于其父进程,然而,父进程可以通过调用API函数TerminateProcess()来终止子进程。该函数的原型如下: BOOL TerminateProcess (HANDLE hProcess, UINT status ); 13.2.2 创建多线程 1.创建线程 可以通过调用API函数Create
文档评论(0)