Delphi 讲义教程 第七章 Windows编程基础.pdf
《Delphi 讲义教程 第七章 Windows编程基础.pdf》由会员分享,可在线阅读,更多相关《Delphi 讲义教程 第七章 Windows编程基础.pdf(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章第七章Windows编程基础编程基础 7.1 动态链接库(动态链接库(DLL)7.2 Windows API及其函数及其函数 7.3 消息处理消息处理 7.4 多线程编程多线程编程 7.5 文件访问文件访问7.1 动态链接库(动态链接库(DLL)一、什么是一、什么是DLL 二、二、DLL项目文件项目文件 三、创建三、创建DLL 四、四、DLL中的初始化代码中的初始化代码 五、调用五、调用DLL一、什么是一、什么是DLL Windows允许同时运行的多个程序共享一组函数的单一拷贝,于是引入了动态链接方式,将可共享的程序代码以及各种数据资源编译成单独的模块,即动态链接库(允许同时运行的多个程
2、序共享一组函数的单一拷贝,于是引入了动态链接方式,将可共享的程序代码以及各种数据资源编译成单独的模块,即动态链接库(DLL)。)。二、二、DLL项目文件项目文件 在在Delphi的的IDE中,编写中,编写DLL程序与一般的应用程序没有太大的区别,除了在内存、资源管理上有所不同外,区别主要体现在项目文件上。项目文件是一个应用程序项目的主程序。选择执行菜单【程序与一般的应用程序没有太大的区别,除了在内存、资源管理上有所不同外,区别主要体现在项目文件上。项目文件是一个应用程序项目的主程序。选择执行菜单【Project】【】【View Source】项,可以在编辑窗口打开相应的项目文件。】项,可以在编
3、辑窗口打开相应的项目文件。DLL项目文件的格式如下:项目文件的格式如下:library 程序标识符号程序标识符号;uses 单元列表单元列表;exports 过程和函数标识符列表过程和函数标识符列表;begin程序体程序体;end.三、创建三、创建DLL创建创建DLL项目的一般步骤如下:(项目的一般步骤如下:(1)利用)利用Delphi的应用程序模板,建立一个的应用程序模板,建立一个DLL程序框架;(程序框架;(2)保存文件;()保存文件;(3)直接在)直接在DLL项目文件内编写过程和函数代码,或将过程和函数代码组织为一个单元,并在项目文件内编写过程和函数代码,或将过程和函数代码组织为一个单元
4、,并在DLL项目文件中引用该单元;(项目文件中引用该单元;(4)需要被其他应用程序动态链接的过程或函数,必须在过程或函数头的尾部加上)需要被其他应用程序动态链接的过程或函数,必须在过程或函数头的尾部加上export编译指令,同时将这些过程和函数名在编译指令,同时将这些过程和函数名在DLL项目文件的保留字项目文件的保留字exports后列出;(后列出;(5)编写)编写DLL的初始化代码,这一步是可选的;(的初始化代码,这一步是可选的;(6)编译程序,生成)编译程序,生成DLL文件。文件。四、四、DLL中的初始化代码中的初始化代码DLL加载时一些必要的初始化操作如开锁数据段、分配内存等,由系统自动
5、完成。在需要的情况下,可以在加载时一些必要的初始化操作如开锁数据段、分配内存等,由系统自动完成。在需要的情况下,可以在DLL项目文件的项目文件的beginend.之间添加自定义的初始化代码,来完成下列一些操作:之间添加自定义的初始化代码,来完成下列一些操作:初始化变量、分配全局内存块、登录窗口对象等初始化工作。初始化变量、分配全局内存块、登录窗口对象等初始化工作。设置 设置DLL退出时需要执行的某些自定的操作。退出时需要执行的某些自定的操作。五、调用五、调用DLL1.静态引入静态引入又称为隐式调用,即把静态引入静态引入又称为隐式调用,即把DLL过程或函数视为一个外部过程或函数来定义,使用时与一
6、般过程或函数相同,看不出它是一个过程或函数视为一个外部过程或函数来定义,使用时与一般过程或函数相同,看不出它是一个DLL。当隐式调用。当隐式调用DLL的应用程序启动后,立即静态引入的应用程序启动后,立即静态引入DLL的过程或函数。如果此的过程或函数。如果此DLL不存在,那么程序刚启动就提示错误,并终止程序的运行。不存在,那么程序刚启动就提示错误,并终止程序的运行。2.动态引入不必在应用程序启动时立即静态引入动态引入不必在应用程序启动时立即静态引入DLL,可在程序运行的必要时刻,动态引入,可在程序运行的必要时刻,动态引入DLL。动态方式不仅灵活,而且较为安全。缺陷是:若。动态方式不仅灵活,而且较
7、为安全。缺陷是:若DLL文件较大,且引入时为首次引导加载,则影响运行速度。文件较大,且引入时为首次引导加载,则影响运行速度。7.2 Windows API及其函数及其函数 一、一、Windows API函数分类函数分类 二、二、API函数调用函数调用一、一、Windows API函数分类函数分类 Windows API由其定义的数据结构、常量和数百个函数组成,它们分布于由其定义的数据结构、常量和数百个函数组成,它们分布于Windows提供的众多动态链接库中。根据提供的众多动态链接库中。根据API函数的来源以及函数的来源以及Delphi所定义的相对应单元,可将所定义的相对应单元,可将API函数做
8、出如表函数做出如表7-3的划分。的划分。二、二、API函数调用函数调用Delphi中已经定义了相应的单元,给出了所有中已经定义了相应的单元,给出了所有Windows API函数的编程接口,因此可以在函数的编程接口,因此可以在Delphi程序中直接调用程序中直接调用API函数。虽然函数。虽然API函数调用就是函数调用就是DLL调用,但在调用,但在Delphi中调用中调用API函数非常简单,不需要声明外部引入,只需在函数非常简单,不需要声明外部引入,只需在Uses保留字后声明相应的单元即可。保留字后声明相应的单元即可。DLL引入的操作定义已由引入的操作定义已由Delphi预先定义的单元完成。预先定
9、义的单元完成。7.3 消息处理消息处理 一、一、Windows的消息机制的消息机制 二、二、Delphi的消息处理的消息处理 三、发送消息三、发送消息 四、响应消息四、响应消息一、一、Windows的消息机制的消息机制 Windows并不通知应用程序应该完成什么工作,而是通知应用程序发生了什么事情,这便是所谓的消息,然后,由截获消息的应用程序自己决定如何去处理这些事件。并不通知应用程序应该完成什么工作,而是通知应用程序发生了什么事情,这便是所谓的消息,然后,由截获消息的应用程序自己决定如何去处理这些事件。一个应用程序一旦启动,一个应用程序一旦启动,Windows便为该应用程序建立一个消息队列(
10、便为该应用程序建立一个消息队列(message queue),开始且陆续地将与该应用程序有关的消息加入它的队尾。应用程序则要逐个地将其消息队列中的队头消息取出,筛选出有用的消息,再指派给某个窗口过程,由其对消息进行处理和做出响应。从某种意义上讲,),开始且陆续地将与该应用程序有关的消息加入它的队尾。应用程序则要逐个地将其消息队列中的队头消息取出,筛选出有用的消息,再指派给某个窗口过程,由其对消息进行处理和做出响应。从某种意义上讲,Windows的应用程序不过是一个消息处理器。事件就是被消息所驱动的。每个应用程序内部必定有一段循环程序,负责检索其消息队列,的应用程序不过是一个消息处理器。事件就是
11、被消息所驱动的。每个应用程序内部必定有一段循环程序,负责检索其消息队列,这段特殊的程序称为消息循环这段特殊的程序称为消息循环(message loop)。消息的数据结构在消息的数据结构在Windows中被定义为如下的记录类型:中被定义为如下的记录类型:TMessage=recordMsg:Cardinal;WParam:Word;LParam:Longint;Result:Longint;end;消息定义为如下的消息定义为如下的TMsg记录类型:记录类型:TMsg=packed recordhwnd:HWND;message:UINT;wParam:WPARAM;lParam:LPARAM;t
12、ime:DWORD;pt:TPoint;end;二、二、Delphi的消息处理的消息处理三、发送消息三、发送消息下列两个下列两个Windows API函数均可实现消息的发送。函数均可实现消息的发送。function SendMessage(hWnd:HWND;Msg:UINT;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;function PostMessage(hWnd:HWND;Msg:UINT;wParam:WPARAM;lParam:LPARAM):BOOL;stdcall;四、响应消息四、响应消息1.覆盖组件继承的虚拟方法覆盖组件继承的虚拟
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi 讲义教程 第七章 Windows编程基础 讲义 教程 第七 Windows 编程 基础
限制150内