第六章Windows深入编程初步_第1页
第六章Windows深入编程初步_第2页
第六章Windows深入编程初步_第3页
第六章Windows深入编程初步_第4页
第六章Windows深入编程初步_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章Windows编程基础7.1动态链接库(DLL)

7.2WindowsAPI及其函数

7.3消息处理

7.4多线程编程

7.5文件访问

7.1动态链接库(DLL)一、什么是DLL

二、DLL项目文件

三、创建DLL

四、DLL中的初始化代码

五、调用DLL

一、什么是DLLWindows允许同时运行的多个程序共享一组函数的单一拷贝,于是引入了动态链接方式,将可共享的程序代码以及各种数据资源编译成单独的模块,即动态链接库(DLL)。

二、DLL项目文件在Delphi的IDE中,编写DLL程序与一般的应用程序没有太大的区别,除了在内存、资源管理上有所不同外,区别主要体现在项目文件上。项目文件是一个应用程序项目的主程序。选择执行菜单【Project】→【ViewSource】项,可以在编辑窗口打开相应的项目文件。

DLL项目文件的格式如下:library程序标识符号;uses单元列表;exports过程和函数标识符列表;begin程序体;end.三、创建DLL创建DLL项目的一般步骤如下:(1)利用Delphi的应用程序模板,建立一个DLL程序框架;(2)保存文件;(3)直接在DLL项目文件内编写过程和函数代码,或将过程和函数代码组织为一个单元,并在DLL项目文件中引用该单元;(4)需要被其他应用程序动态链接的过程或函数,必须在过程或函数头的尾部加上export编译指令,同时将这些过程和函数名在DLL项目文件的保留字exports后列出;(5)编写DLL的初始化代码,这一步是可选的;(6)编译程序,生成DLL文件。四、DLL中的初始化代码DLL加载时一些必要的初始化操作如开锁数据段、分配内存等,由系统自动完成。在需要的情况下,可以在DLL项目文件的begin…end.之间添加自定义的初始化代码,来完成下列一些操作:l

初始化变量、分配全局内存块、登录窗口对象等初始化工作。l

设置DLL退出时需要执行的某些自定的操作。五、调用DLL1.静态引入静态引入又称为隐式调用,即把DLL过程或函数视为一个外部过程或函数来定义,使用时与一般过程或函数相同,看不出它是一个DLL。当隐式调用DLL的应用程序启动后,立即静态引入DLL的过程或函数。如果此DLL不存在,那么程序刚启动就提示错误,并终止程序的运行。2.动态引入不必在应用程序启动时立即静态引入DLL,可在程序运行的必要时刻,动态引入DLL。动态方式不仅灵活,而且较为安全。缺陷是:若DLL文件较大,且引入时为首次引导加载,则影响运行速度。7.搞2Wi脚nd培ow眠s貌AP志I及其兰函数一、Wi滨nd详ow恭s衡AP通I函数吊分类二、AP邀I函数括调用一、Wi扎nd旺ow锅s考AP仿I函数陕分类Wi掘nd并ow名s贪AP馆I由其笔定义悄的数坦据结乳构、游常量胳和数盘百个灶函数所组成信,它继们分取布于Wi仅nd很ow滤s提供艘的众煌多动敞态链键接库为中。叶根据AP盾I函数爆的来葛源以品及De反lp篮hi所定抚义的稿相对架应单白元,程可将AP饮I函数撕做出奔如表7-辱3的划绣分。二、AP声I函数抹调用De粗lp维hi中已贱经定脏义了嫁相应且的单马元,凡给出缓了所标有Wi缠nd稀ow瞒s拨AP饮I函数碎的编帐程接湖口,仍因此呢可以歌在De为lp饱hi程序遥中直弱接调刊用AP变I函数樱。虽珍然AP揪I函数历调用饿就是DL抢L调用探,但器在De饶lp蒙hi中调映用AP趴I函数跑非常盐简单芬,不迷需要译声明昂外部饭引入导,只夫需在Us腔es保留柏字后肯声明提相应肌的单普元即彻可。DL寒L引入系的操遇作定泰义已卷由De疏lp网hi预先为定义滚的单续元完边成。7.救3凭消称息处刮理一、Wi含nd愧ow份s的消巴息机畅制二、De朱lp让hi的消置息处规理三、发送绑消息四、响应顿消息一、Wi阳nd佣ow徒s的消之息机连制Wi牛nd障ow静s并不柜通知柏应用蚁程序拢应该裹完成投什么库工作酱,而扁是通稀知应亿用程旱序发转生了城什么冷事情墨,这尖便是句所谓衰的消怨息,塔然后巩,由舟截获善消息米的应删用程帖序自猜己决脚定如渐何去抄处理傍这些淋事件基。一个姿应用喝程序哀一旦蛇启动冈,Wi抹nd顺ow霸s便为块该应炼用程歉序建排立一朝个消践息队墙列(me奴ss虹ag烂e勒qu质eu赴e)葡,开始虽且陆箱续地衰将与军该应踪蝶用程耍序有戚关的神消息庄加入骂它的闹队尾出。应仅用程缠序则型要逐辉个地俭将其菠消息慌队列给中的吴队头工消息庙取出月,筛槽选出即有用键的消卵息,吸再指琴派给饭某个即窗口胆过程用,由草其对援消息界进行沟处理捎和做芽出响绣应。新从某唤种意蜻义上面讲,Wi财nd顺ow讽s的应技用程投序不痒过是垃一个叶消息匆处理丈器。缠事件紫就是惕被消予息所位驱动形的。彻每个高应用铲程序姜内部钟必定栏有一始段循血环程拒序,潮负责胶检索嫂其消形息队窑列,志这段纵特殊肺的程辰序称圾为消括息循塘环(me非ss穿ag木e丛lo旧op垮)。消息越的数头据结举构在Wi活nd饼ow珍s中被泛定义毙为如糖下的肿记录晌类型旁:TM休es秃sa解ge=委re彩co筝rdMs汪g:宵Ca协rd刺in禾al喜;WP妹ar徐am:游Wo阿rd肾;LP肢ar臣am:Lo茂ng僚in务t;Re舒su错lt相:Lo墓ng请in琴t;en忽d;消息颂定义呀为如办下的TM咐sg记录惹类型须:TM毛sg=央pa架ck洽ed班r酸ec甩or头dhw愤nd:宁HW忘ND膛;me茫ss遣ag歉e:识U鸽IN盐T;wP岂ar窄am:蚊WP总AR症AM瞒;lP邮ar研am:嫁LP况AR督AM魄;ti剑me晋:顷DW歇OR众D;pt肿:TP锤oi鸟nt;en茎d;二、De设lp旧hi的消畅息处惜理三、发送积消息下列池两个Wi苍nd述ow茫s暗AP贯I函数眨均可档实现量消息据的发咸送。fu幸nc庄ti犯onSe轻nd内Me浴ss优ag寒e(hW扭nd:H培WN信D;Ms录g:U抛IN啦T;wP皆ar茄am:W发PA狭RA旋M;lP吸ar纸am:L摔PA宣RA走M):L刑RE巾SU主LT拨;st枝dc加al惩l;fu竿nc虾ti即onPo党st债Me搂ss辨ag卡e(hW伙nd:H扭WN陪D;Ms皂g:U幅IN膜T;wP声ar颗am:W国PA婚RA拖M;lP煮ar档am:L互PA校RA非M):隙BO尤OL惑;st离dc汗al匙l;四、响应烛消息1.猪覆闭盖组陷件继盲承的昨虚拟装方法Wn兔dP钻ro阻cpr悬oc羊ed手ur菌eTN率ew笛Co越mp同on筹en延t.Wn恐dP闹ro筒c(va弄rme晃ss队ag桌e:TM至es乖sa苗ge);be原gi卧nif版m套es怨sa银ge谊.Ms棉g=需要均过滤敏的消药息th涂enbe是gi辽n//此处可编写曾处理改过滤嚷消息生代码ex璃it垦;en柱d;in维he寺ri骄te贡dWn鞭dP冒ro廉c(m搁es拐sa孔ge用);di垂sp豪at御ch世(m艺es景sa善ge娇);en案d;2.寻覆敲盖组惭件继亲承的劳虚拟恨方法De奶fa悦ul呢tH张an阿dl落er在继夜承类增中对De串fa棕ul廉tH孩an田dl迎er过程捷进行摄覆盖椅,同历样可蹦以实荣现类赖似于和前一符种方患法的皂消息寒过滤脏。3.送自宴定义工消息秀和消枝息处车理方并法Wi博nd哭ow必s预定湿义了拖10配24厚个编随码从检$0润00轻0到雁$0壮3FF的消条息常获量标鉴识符忆,留骡出从坚$0亭40责0到愤$7FF裕F的编鸣码空史间用寺于用响户自滚定义尿消息扭。其页中的某$0黎40归0已败定义器为WM延_U叙SE劲R。因此摄,自甚定义顷消息抄常量扒标识白符的两形式收如下竿:co悠ns蹲tWM敞_Us纽奉er薪Ms厉gN虾am痒e=买WM泻_U蜓SE谷R铸+睁N;尖//其中泊,0深<=N<再=3回17华434.TA输pp贺li涝ca述ti毯on的On熔Me持ss工ag滥e事件每当终应用黎程序裹从消壤息队蜜列中剥检索梯到一避个消众息时适,便摇触发Ap俗pl薄ic吼at葡io率n的On枕Me马ss液ag览e事件慢。由阴此,么在消榜息被崇派送丝式到对踏其响乓应和姑处理饺的目棒标对刮象之茄前,华有机狮会处拥理该歼消息昼。7.闪4不多惩线程远编程一、进程猛与线洲程二、TT占hr垂ea基d类三、创建会线程业类四、线程孙的优宇先级族与线拥程调千度五、线程砍的挂赏起、搜恢复鸦和终醋止六、线程萄的协阁调一、进程腰与线恭程在Wi滔nd喇ow冶s操作滤系统党中,圆可以辱同时糊运行狸多个鸽程序俊,甚唤至可陕以启仗动一愤个程袄序的帜多个豪实例咏,此脆即所酱谓的借多任馆务。裤可见右,静孩态的踩程序挤与在拾计算技机中准运行依的程饶序是委有区讲别的棉。为看明确金概念德,特粉将载栏入内体存准在备执舌行的支应用牺程序答称为筐进程墨。进程堵由下枪列部仆分组醒成:l一个滩私有期的、饺4GB大小叹的虚州拟地贼址空便间;l程序雄相关默的代愚码和盘数据幸;l操作娇系统走分配隆给进肚程的块系统恐资源场,如级文件猪、单盗独的贞消息达队列摄、同碑步对泼象等害;l至少心包含详一个犬线程筛,这界个线唇程称喘为主短线程慈,通附过它泄可以塘创建跳或控标制其削他线乎程。进程绣本身疗并不萍直接抛执行千代码亮,进欲程内利的基旷本执抛行单斜元是弦线程荷。一傅个进勒程可彼以包育含多早个线育程,链每个纠线程阳都可明以独简立运饭行,虚并保举持各丽自的息堆栈厉和寄滚存器交的值踢。一相个线重程可丘以控轮制另泳一个读线程给的执队行,终一个季进程抱内的萍各个距线程逝共享姿该进炮程的点虚拟健空间蚕和系她统资填源。镇而不哈同进弊程之链间则翠互不妖干扰篮。二、TT听hr倚ea嚼d类TT饱hr支ea想d类封聪装了Wi瘦nd脆ow庙s绒AP休I和Sy内st掩em单元话中有鲜关线范程运朋用的谊函数内和例虹程。浊与VC挨L中一透般的覆类不配同的聋是:TT恨hr瓣ea砌d类是谦一个访抽象坟类,割其所纳带方校法是忙虚拟邻抽象葵的,事因而模不能富直接序创建TT昼hr怕ea扮d的对砖象实械例,臭而必竹须先关声明命一个警由TT困hr评ea骄d继承段来的肿线程油类,贪再利淡用这蛇个派页生类参创建篮线程牌对象撒实例壳和操河纵线兽程具呆体类持的属霸性和孝方法摸。1.TT郑hr相ea塞d类的址属性Su烛sp沾en淡de挣d属性奴、Te储rm船in凉at赛ed属性、Pr具io纱ri虹ty属性、Fr判ee巩On白Te浑rm妨in组at撒e属性、Re视tu味rn旅Va捉lu质e属性。2.TT沉hr赔ea雾d类的回方法Cr汉ea岁te方法尼、Ex鹅ec伯ut斜e方法、Su喝sp闪en磨d方法况、Re绿su狱me方法、Te霜rm膨in柏at遥e方法、Do热Te业rm拔in歉at腊e方法、Sy珠nc欺hr情on页iz引e方法、Wa行it魄Fo雾r方法3.TT匠hr例ea吃d类的遵事件TT窜hr级ea椅d仅定揪义了论一个On传Te琴rm烧in滋at嫁e事件谱,当迫线程投对象服运行群终止参时触立发该德事件收。编悼写该铲事件牺代码担,可评用于计通知箭应用迅程序典的主衫线程嫁该线归程已娇结束撒运行肆。三、创建舟线程广类De床lp汇hi为新壁建各详种类阵型的墨文件誉提供喂了丰唤富的校模板蛛,其骆中也徐包括棕新建桨由TT拼hr患ea芬d派生隔出的勉线程它类单去元的旁模板容。四、线程持的优枣先级曾与线弦程调眼度每个郊线程蛾都会披赋予椒一个肢最低既从0到最泥高为31的优动先级虏编号奴,操盈作系挥统将CP潜U时间览片优再先分微配给恼优先糕级高家的线团程,孝高优拣先级僻的线挠程将求抢在越低优六先级推线程申之前匹运行辉。无定论低驼优先落级线伤程的滤运行养正处弹在其团时间承片的粪什么暗时候深,若喘操作精系统右发现拥一个锤高优激先级袍的线嫌程准触备要烦运行凤,便哨立即豪暂停茄低优鲜先级摆线程浪的运伶行,汪而将宿一个煎完整通的时树间片咏分配卫给高驳优先克级线知程。32位的Wi想nd废ow似s系统痒便是背采取牲这种乎抢先前式的串线程唯调度卧方式遵。五、线程写的挂携起、样恢复液和终有止何时单挂起误和唤犹醒线就程主榴要由挨操作旁系统刺负责自调度峰。然嚷而,胡应用向程序炼可以底使用TT朽hr湿ea区d类的Su摔sp每en值d方法酸挂起授线程盘,暂旁停其字执行使,使坝用Re肝su介me方法舰唤醒统线程观,恢晃复其词运行雀。线谋程可童以自说己挂恭起,倘但不花能自扭己恢袄复运准行,赏必须蜜由其鱼他线附程恢虹复它罢的运脱行。科线程胳的Ex军ec躺ut粮e方法中代码帅执行帝结束热时,滤即意羞味着呆线程埋的终储止,菠线程桃自动穷退出追。六、线程贼的协剧调1.千线酱程互朱斥VC阅L中提及供了果3种吗解决歪线程顾互斥着的方敲法。(1拳)锁膝定对距象(2忽)设置裹临界厨段(3)共萄享读烤与独浙占写2.服线币程同拜步一个堡线程陡需要条等待位其他痒线程伸的任挥务结饥束才以能继狐续,女那么厚可以膛暂时岂挂起霞线程竹。有肤下列脂两种战情况滨:(1萄)等蒙待其牵他线默程终旋止(2)等闻待一娘个作内业完楚成7.申5搅文汉件访精问一、Pa话sc竭al方式歪的文现件访靠问二、Wi伞nd明ow兆s笋AP核I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论