




已阅读5页,还剩48页未读, 继续免费阅读
(动力机械及工程专业论文)热动类基本数据库与函数库的研究与开发.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
东南火学硕上学位论文 摘要 在众多的计算机应用中,有一类重要的计算机应用。那就是数据库应用。它涉及大量的数据并 将其持久化以及为多个应用程序所共享。而在热工生产、运行和试验中,往往需要用到许多的物性 参数和函数,所以将热工专业与数据库相结合,已成为专业发展的个必然的趋势。 本文主要讨论如何建立物性参数数据库和物性函数信息库,以及开发相关的查询程序。其中, 数据库应用的建立主要包括物性参数以及物性函数信息的存储数据模式的设计,并为以后的完善和 扩展提供足够的空间。围绕这两个数据库应用,开发了满足各种应用要求的查询程序。这些查询程 序主要分为两种:界面查找程序和非界面查找程序。界面查找程序主要提供友好的用户界面来提供 查询服务,包括各种材料名称的查询、物性参数属性符号查询和函数信息查询程序等:而非界面查 找程序主要用于在用户编制的代码中查询使用相关物性数据和函数。根据热工应用计算的特点,文 中详细介绍了各种用户程序调用的查询接口的设计、查询过程中采用的一些优化措旌以及界面查询 窗口中显示相关内容时的读取策略等。 最后,本文结合火电厂的高压加热器的热力性能校核计算来具体说明在程序中如何使用各种查 询接口以及相关的界面查找程序。 数据库应用和相关的查询程序开发主要使用a c c e s s 数据库、v c 和a d o ,同时还辅以相关软件 和编程工具。 关键宇:热动物性参数库物性函数信息库高压加热基校核计算 东南大学硕士学位论文 a b s t r a c t i nn u m e r o u sc o m p u t e r a p p l i c a t i o n s ,t h e r ei sa l li m p o r t a n t o n ec a l l e dd a t a b a s ea p p l i c a t i o n i td e a l sw i t h a n ds t o r a g e sam a s so fd a t at h a tc a r lb es h a r e di no t h e ra p p l i c a t i o n s a tt h es a m et i m el a r g en u m b e r so f t h e r m a l p h y s i c a lp a r a m e t e r s a n df u n c t i o n sa r eu t i l i z e di nt h ep r o c e d u r eo f t h e r m a l p r o d u c t i o n ,o p e r a t ea n d t e s t t h e r e f o r ec o m b i n i n gh e a te n e r g ys p e c i a l i t ya n dt h et e c l r l o l o g yo f t h ed a t a b a s eh a sa l r e a d yb e c o m ea n i n e v i t a b l et r e n do f p r o f e s s i o n a ld e v e l o p m e mo f h e a te n e r g y t h i st e x td i s c u s s e sm a i n l yh o wt os e tu pt h et h e r m a l p h y s i e a lp a r a m e t e rd a t a b a s ea n dt h e r m a l p h y s i c a l f u n c t i o ni n f o r m a t i o nd a t a b a s e ,a n dd e v e l o pt h er e l e v a n ti n q u i r yp r o c e d u r e t h em a i nw o r ki n c l u d e st h e d e s i g no f t h ed a t as c h e m ao f t h e r m a l p h y s i c a lp a r a m e t e r sa n d f u n c t i o ni n f o r m a t i o n ,a n do f f e re n o u g hs p a c e f o rp e x f e c t i o na n de x p a n s i o nf o rt h ef u t u r e i no r d e rt om e a d n gt h er e q u e s to fs o m ea p p l i c a t i o n s ,v 撕o u s k i n d so fi n q u i r yp r o c e d u r e sh a v eb e e nd e v e l o p e dw i t ht h ed a t a b a s e t h e yc a nb ed i v i d e di n t ot w ok i n d s i n t e r f a c ei n q u i r yp r o c e d u r e sa n dn o n i n t e r f a c eo n e s t h ei n t e r f a c ei n q u i r yp r o c e d u r e so f f e ri n q u i r yt h a t i n c l u d et h en a m eo fm a t e r i a l s ,t h e s i g n o ft h e r m a l p h y s i c a l p a r a m e t e r s a n dt h ei n f o r m a t i o no f t h e r m a l p h y s i c a lf u n c t i o n sb yf r i e n d s h i pi n t e r f a c e ,e t c a n d t h en o n - i n t e r f a c eo n e sa r em a i n l ya p p l i e di nt h e c o d ew o r k e do a t a c c o r d i n gt ot h ec h a r a c t e r i s t i co ft h e r m a lc a l c u l a t i o n ,t h i sp a p e ri n t m d u c e sv a r i o u s k i n d so fi n t e r f a c e s , s o m eo p t i m i z a t i o nm e a s u r e si nt h ei n q u i r yp r o c e d u r e sa n di nt h ei n t e r f a c ep r o c e d u r e s 1 nt h ee n d t h i sp a p e rs h o w st i mu t i l i z a t i o no f v a r i o u sk i n d so f i n q u i r yf u n c t i o ni nd e t a i lb yt h et h e r m a l p e r f o r m a n c e c a l c u l a t i o no f h p h a c c e s sd a t a b a s e v ca n da d o a 他m a i n l yu s e dt od e s i g nt h ea p p l i c a t i o ni nt h ep a p e r a n dm e a n w h i l e t h ec o r r e l a t i v ed r a w i n gt o o l sa n dp r o g r a m m i n gs o t t w a r ea 伸u s e d t h ea s s i s t a n tt o o l s k e y w o r d s :t h e r m a l p h y s i c a lp a r a m e t e r d a t a b a s e t h e r m a l p h y s i c a l f u n c t i o n i n f o r m a t i o nd a t a b a s et h e r m a lp e r f o r m a n c ec a l c u l a t i o no f h p h l 王 东南大学学位论文独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。 尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过 的研究成果,也不包含为获得东南大学或其它教育机构的学位或证书而使用过的材料。与我 一同工作的同志对本研究所做的任何贡献均己在论文中作了明确的说明并表示了谢意。 研究生签名:么象盘勤。日期:幽;、1 东南大学学位论文使用授权声明 东南大学、中国科学技术信息研究所、国家图书馆有权保留本人所送交学位论文的复印 件和电子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子文档的内容和纸质 论文的内容相一致。除在保密期内的保密论文外,允许论文被查阅和借阅,可以公布( 包括 刊登) 论文的全部或部分内容。论文的公布( 包括刊登) 授权东南大学研究生院办理。 研究生签名:丛蠢虹:导师签名: 日期:m 私,、巧 东南大学硕士学位论文 第一章绪论 1 1 课题的背景和意义 众所周知,在火电机组的热工生产、运行毗及试验过程中,往往需要处理大量的数据以及运用 各种公式进行计算。而对原始数据进行处理时,常常需要查找许多物性参数值以及使用大量的基本、 常用公式手工进行计算。对于物性参数的查找需翻阅各种书籍、图表,运用公式计算虽然不是很复 杂,但有时需要嵌套计算,比较繁琐、耗时费力甚至出错。就拿汽轮机装置的重要设备之高 压给水加热器的性能校核计算来说,往往需要根据水或水蒸气的温度、压力在汽水性质图表中查找 相应的焓、熵、比容、粘度、比热以及热导率甚至还需反过来根据压力、焓来求其余各相关属性等, 以及加热器材料的热导率,根据不同流动方式进行选取的温差修正系数和传热系数计算公式,用传 热有效度法进行校核计算时使用的校核公式以及嚣种系数等1 1 ”。这些数值和公式的收集需要花费一 定的时间和精力,有时对数据的取用尤其是在读取图表中的数据时可能出现偏差,在需要大量数据 时甚至可能出错并且浪费大量时间。如果在需要实时结果的情况下,靠手工查找及计算有时是不能 满足需要的。 随着计算机技术迅速发展以及在各个发电厂的日益广泛应用,各种应用软件应运而生,节省了 大量的时间,减少了许多工作量( 尤其是在进行重复的计算时) ,从而提高了工作效率。虽然目前有 不少计算软件。但都针对某些具体介质或某一方面,比如水蒸汽性质参数在线计算锅炉性能在线 计算等,没有全面包括所需信息,部分仍需手工计算,而且需要分别维护各计算软件。很多情况下, 针对某一具体要求编制的计算软件往往将数据和公式等硬编码在程序中,导致个现有应用程序的 信息不能被另一个所使用,仍需重新整理从而增加了重复工作量。另外。在计算公式改进或变动 来满足新要求时,往往需重新开发计算软件。这更增加了软件维护的困难度,限制了软件的应用范 围。 因此。这种数据信息和计算程序的紧密耦合关系,非常不利于计算程序的开发及扩展,势必大 大降低工作效率。而另一方面,将数据信息与计算程序相分离并保持松散耦合的关系,单独对数据 信息进行维护和管理,建立一种通用、全面而易于扩展和维护的热动物性参数数据库以及基本函数 数据库系统,必将大大提高工作效率,从而有着十分重要的经济效益和社会意义。 1 2 课题的目的和意义 在计算机技术和数据库技术高速发展以及在各个领域广泛应用的今天p l ,将其与热工生产、运 行和试验等环节相联系,把涉及处理用到的热动物性参数存储在数据库中。并制作友好的操作界面 以及调用接口,便于手工操作和程序调用,从而免去各种物性数值的手工查找。节省宝贵的时间: 将数据处理的基本、常用计算公式制作成动态链接库的形式,节省了大量的公式查找及计算时间, 并将函数特征及基本信息保存在数据库中,便于程序调用。另外制作详细的物性属性和函数特征和 功能在线说明,便于人员在程序开发时使用。 目前,对于在热工生产、运行以及试验过程中所需的物性参数和基本函数并没有建立起较为完 善且易于扩展的信息系统。普遍的是针对某一具体方面的计算程序或系统,缺乏通用性和普遍性。 而对于物性属性的在线说明和基本函数的特征和基本信息在线说明也不是很多,这更加妨碍了程序 和数据信息的重复利用。 总而言之,将各种热动物性参数制作成数据库以及将基本函数制作成动态链接库的形式,将函 数文档化并与一些程序开发环境集成来提供在线帮助,减少了翻阅资料、手工计算的繁琐过程,将 注意力集中在热工过程重要环节上,节省了大量宝贵的时间,有着重要的经济效益和社会效益。另 外,通过将新的信息逐步添加到库中来使其更加完善和通用。 晟后结合“火力发电厂的高压给水加热器的校核计算”来具体说明如何对热动物性属性值进 行读取以及相应的环境条件的设置、如何根据库中函数的特征和基本信息对函数进行动态调用等。 东南大学硕_ j 学位论文 1 3 开发环境和关键技术 本文的工作主要是依靠m i c r o s o f tv i s u a lc h6 0 开发环境p 1 并结合m i c r o s o t :ta c c e s s 数据库p 和a d o i 7 1 q 数据访问接口来完成的。不过对于物性参数的读取和基本函数的调用也可应用在v i s u a l b a s i c 中。 本文着重于数据信息的存储设计和友好的使用接口和界面的开发,并使其尽量的具有通用性, 其关键技术为: 1 热动物性参数在关系数据库中的关系数据模型设计在关系数据库中,关系数据模型的设计最 为关键,由于各类参数很多、涉及方面广,所以好的设计方案便于数据库的维护、扩展并可减 少数据冗余及矫正错误数据。同时具有很友好的数据库操作界面,以便于查找、添加、删除和 修改等。 2 ,基本函数动态链接库的设计由于热工计算公式非常多,动态链接库设计应便于程序调用、维 护和函数的替换更新。 3 函数库的在线帮助往往在开发具体应用程序时,需要调用动态链接库中的函数,而由于函数 取名、参数命名习惯等因人而异,不便于程序开发人员编程使用。即使提供文档化说明,也不 便于程序开发时查找。而对于一些大家熟知的可视化程序开发环境,比如v i s u a lc + + 、v i s u a l b a s i c 等,都有强大的函数在线帮助系统,所以如何使得对物性基本函数的调用如同调用开发环 境自身所带的函数一样简单是本课题的关键技术之一。 4 通过v i s u a lc + + 结合a d o 统一数据库访问接口,以便关系数据库的扩展,井运用s q l 语言优 化数据库的操作。 参考文献 1 蔡锡琮编著高压给水加热器【m l 北京:水利电力出版社,1 9 9 5 2 钱颂文主编换热器设计手册 m 】北京:化学工业出版社2 0 0 2 3 王能斌编著数据库系统原理【m 1 北京电子工业出版社,2 0 0 0 4d a v i sc h 印m 卸著学用v i s u a l c h l 6 o 【m 】骆长乐译北京:清华大学出版社,1 9 9 9 5a l l e nl w y a t t 著a c c e s s2 0 0 0 快速突破l l v o 彭颖译北京:机械工业出版社,2 0 0 0 6万维计算机图书编写组编著a c c e s s2 0 0 0 应用高手速成【m 】北京:机械工业出版社,2 0 0 0 7m i k eg t m d e r l o y 著a d o 与a d o n e t 编程指南i m 邱仲潘译北京电子工业出版社,2 0 0 2 8d a v i ds c e p p a 著a d o 编程技术o 哪肖炊等译北京:清华大学出版社,2 0 0 1 2 东南大学硕l 学位论文 第二章v c 及数据库相关技术简介 2 1v i s u a lc + + 简介 2 1 1c + + 语言简介 计算机革命起源于一台机器,程序设计语言也源于一台机器”j 。 c + + 语言是由c 进化而来的,是c 语言的超集川。c + + 在程序结构的本质上与c 是一致的,都 是用函数驱动机制来实现的。然而在源代码层次上可以很容易看出,c 语言为过程化设计语言而c + + 则是面向对象程序设计语言。这更加符合人们的思维逻辑,有利于软件在源代码层次上的重复使用、 管理和维护1 2 】o 一基本概念 作为面向对象程序设计语言( o o p ) ,c + + 的基本概念和特征主要为:封装、继承和多态性。然 而,c + + 包含了比面向对象程序设计基本概念更多的内容。 a 封装:特性+ 行为” 第一个面向对象的程序设计语言是6 0 年代开发的s i m u l a - 6 7 。首次引入了“类”和“对象”的 概念。 类描述了一组有相同特性( 数据元素) 和相同行为( 函数) 的对象。类实际上就是数据类型, 比如,浮点数也有一组特性和行为。区别在于程序员定义类是为了与具体问题相适应。程序员可以 通过增加他所需要的新数据类型来扩展这个程序设计语言。类用于对某一事物或问题的抽象描述。 对象是所属类的一个具体存在。它在程序运行时在内存中动态生成。程序可以按自己所需对对 象进行操作( 函数调用或发送消息) 。 b 继承:类型关系 类型不仅仅说明一组对象上的约束,还说明与其它类型之间的关系i l j 。两个类型可以有共同的 特性和行为,但是,一个类型可能包括比另一个类型更多的特性,也可以处理更多的消息。继承表 明了基本类型和派生类型之间的相似性。新子类是从现有类型派生出来的,称为派生类。程序员创 建一个基本类型以描述系统中一些对象的思想核心。由这个基本类型派生出其它类型,表达了认识 该核心的不同途径。 c 多态性 多态性是面向对象程序设计语言中最重要的特性。 当处理类型层次结构时,程序员常常希望不把对象看作是某一特殊类型的成员,而把它看作基 本类型成员,这样就可以编写不依赖于特殊类型的代码并且新添类型也不会影响原来的代码。这是 扩展面向对象程序以处理新情况的最普通方法。比如,学生类应该有一个计算成绩的操作。大学生 继承了中学生,或者说是中学生的延伸。对于中学生,计算成绩的操作表示语文、数学、英语等课 程的计算,而对于后继的大学生,计算成绩的操作表示高等数学、计算机、普通物理等课程的计算。 继承性和多态性的组合,可以轻易地生成一系列虽然类似但独一无二的对象。由于继承性,这 些对象共享许多相似的特征。但由于多态性,一个对象可以有独特的表现方式,而对另一个对象有 另一种表现方式。 二c + + 语言的特性 c - h - 的目的是提高效率。它是c 语言面向对象程序设计的转变。而这种转变在经济上所花的代 价是较小的i l j 。程序员在c + + 环境下可以继续写c 代码。并能直接得到好处。它堵塞了c 语言中的 一些漏洞,提供了更好的类型检查和编译时分析。允许对函数参数和返回值的地址进行更方便的处 理。另外,对名字空间的改进处理,使得对函数的命名约束和冲突大大减少并且加强了名字的控制。 而设置在源代码级的访问控制,更加加强了代码的使用和管理。 c 代码在c + + 中仍然是有用的,并且在重新编译时,常会发现隐藏的错误。c + + 中强大的异常 处理功能完全改变了c 语言中的错误处理一片混乱的局面,保证在程序运行时能够捕捉异常并进行 处理,而程序员所需要做的就是在可能出现异常的代码处添加测试和处理代码,并可将异常对象逐 级传递,大大简化了程序员对错误处理的复杂度。 2 1 2w i n d o w s 程序简介 m i c r o s o f tw i n d o w s 是一个应用于微型计算机上的具有图形化用户界面的操作系统,它为应用程 序提供了一个由一致的窗口和菜单结构构成的多任务环境f 3 l o 在用c + + 编写程序时,一定要有一个m a i n ( ) 函数。程序的运行由m a i n ( ) 函数开始,其它函 东南火学硕上学位论文 数都是由m a i n ( ) 函数调用的( 其实在m a i n ( ) 函数执行之前,c 运行库已经运行并调用其自身的 启动函数将一些变量初始化,但就程序员来说,从m a i n ( ) 函数开始执行更具意义) 。在这一点上, w i n d o w s 程序也是类似的,需要一个w i n m a i n ( ) 函数,该函数主要是建立应用程序的主窗口。它 通过操作系统发送的消息来处理用户输入的事件,程序的主窗口中需要包含处理w i n d o w s 所发送消 息的代码。 窗口是w i n d o w s 应用程序基本的操作单元,是应用程序与用户之间交互的接口环境,也是系统 管理应用程序的基本单位。应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间 进行数据处理与数据交换的过程p j 。 w i n d o w s 是消息驱动的( 或事件驱动的) 操作系统。所谓消息是描述事件发生的信息。比如按 下鼠标键时,系统就会产生一条特定的消息,标识鼠标按键事件的发生。消息驱动意味着操作系统 的每一部分和其他部分以及应用程序之间,是通过w i n d o w s 消息进行通信的。w i n d o w s 程序在开始 部分也需要进行初始化,但初始化完成后就开始等待用户的各种输入。一旦用户有任何输入,操作 系统便会感知,然后向相应的应用程序发送消息,程序要能钐随时接受并处理这些消息。图2 - 1 是 w i n d o w s 程序和w i n d o w s 消息的基本流程。 图2 1w m d o w s 程序和w i n d o w s 消息的基本流程 每个执行程序在运行时,都由一个进程表示。每个进程都有自己的地址空间,它包括所有可执 行模块或d l l 模块的代码和数据。它还包括动态内存分配的空间,如线程堆栈和堆分配空间。但进 程是不活泼的,它只是资源的拥有者和管理者,操作系统并不将其视为调度运行的单元。真正调度 运行的是进程中的线程。可以这么说,进程为线程的执行提供了恰好的资源及上下文环境,而线程 利用进程的环境执行真正的工作1 4 】。因此,进程必须拥有一个在它的环境中运行的线程,该线程负 责执行包含在其地址空间中的代码,并且单个进程可能包含若干个线程,所有这些线程都“同时” 执行进程地址空间中的代码。为此,每个线程都有它自己的一组c p u 寄存器状态和它自己的堆栈。 在3 2 位 a r m d o w s 平台上有两种线程:用户界面线程和工作者线程。其区别为:用户界面线程 包含一个消息循环,因此它可以包含窗口,通过消息循环为窗1 3 分发消息;工作者线程没有消息循 环,因此它不能处理消息,一般用于后台任务的处理,当主函数结束时,线程的任务就完成了”j 。 每个用户界面线程都有自己专有的消息队列,它包括投递消息队列、发送消息队列、应答消息 队列、虚拟输入队列、唤醒标志以及用来描述线程局部输入状态的若干变量。线程维护在其运行期 间所创建窗口的数据结构,即窗口由创建它的线程管理。投递、发送、应答和虚拟队列分别存放投 递来的、发送来的、对方应答的以及虚拟硬件消息。在有消息被队列所接收时,线程的消息循环便 4 东南人学硕1 :学位论文 会将消息发送到相应的窗口过程进行处理。唤醒标志表示队列中存在何种消息及其性质,之所以称 其为唤醒标志是因为在线程空闲( 即所有消息队列为空) 的情况下,线程耍处于阻塞状态,这样可 避免消息循环白白浪费处理器时间,在有消息时,线程将被唤醒并由阻塞状态变为就绪状态,此时 可由操作系统调度执行】。 局部输入状态包括哪一个窗口具有鼠标捕获,鼠标光标的形状及其可见性,当前键盘输入窗口 焦点,活动窗口等。当系统初始化时,要建立一个特殊的线程,即原始输入线程( r a w i n p u t t h r e a d ,r i t ) 。 此外,系统还要建立一个队列,称为系统硬件输入队列s h i q 。首先,鼠标和键盘事件通过相应的设 备驱动程序发送到系统硬件输入队列,而它与r i t 相连,在任何给定时刻,只有一个线程同p i t “连 接”,这样就可将硬件事件通过p i t 发送到相应接收线程的虚拟输入队列。那么,不同的线程是如何 同p i t 连接的昵? 答案就是:当线程所拥有的某个窗口处于前景时,这个线程便与p i t 相连接了。 r i t 和s h i q 构成系统硬件输入模型的核心p j 。 2 1 3v i s u a lc + + 开发环境i ” 作为一种c c + + 语言的集成开发环境( i d e ) ,产生v c 的最早根源其实要追溯到d o s 时代的 b o r l a n d 公司,当初b o r l a n d 公司开发的t u r t : 0p a s c a l 和t u r b oc 让程序员们深刻感受到了把编辑器 和编译器集成在一起的i d e 是多么的方便,微软也看到了这优点。于是相继开发了q u i c kc 和 m i c r o s o f tc ,c + + 等多个d o s 版本的c c + + 集成开发工具。随着w i n d o w s 的不断成熟。微软决定放 弃d o s 下的开发工作,正式推出了w i n d o w s 下的v i s u a lc + + 1 0 ,早期的v c 功能并不怎么强大, 使用起来也不方便,1 0 版和1 5 版都是1 6 位编程工具。v c 的革命性改变得益于w i n d o w s9 5 的推 出,从v c2 0 开始,微软又放弃了1 6 位编程,以后的v c 都只用于3 2 位编程开发,为了与m f c 类库的版本号保持一致,微软跳过了版本3 ,直接推出v c4 0 ,这个版本及修订版4 ,2 的部分界面风 格一直被保留到最新的v c6 0 中。从v c 4 到v c 6 ,v c 的各种功能不断增强,m f c 类库的内容也 越来越丰富,现在利用v c 开发应用程序已经是一件相当轻松的事情了。 在v c 发展的同时,b o r l a n d ( 现在叫l n p r i s e ) 也在不断改进它的c ,c + 十开发工具,并相继推出 了b o r l a n dc _ h 和c h b u i l d e r 等产品,其实,现在的c _ h b u i l d e r 也是一个非常优秀的开发工具,但 是基于下面的几点原因,还是准各先向大家介绍v c :首先,v c 的核心 m c 类库已是事实上的 业界标准,b o r l a n d 自己开发的类库也在向m f c 看齐:其次v c 与v i s u a ls t u d i o 中的其它可视化开 发工具紧密集成,可用于开发非常专业的w i n d o w s 、w e b 和企业级应用程序;第三,v c 的联机帮 助已被集成到m s d n ( 微软开发者网络) 库中去了,后者包含了微软大部分产品的技术文档和支持 资料,内容相当丰富,是程序员不可多得的参考资料,现在m s d n 库随着、,j s u a ls t u d i o6 0 一起发 行,实在是大家的福音。 目前v c 6 是在微软可视化开发套件v i s u a ls t u d i o6 0 中的一项重头戏。v c 6 引入了多项出色的 新功能,例如智能感应( i n t e l l i s e n s e ) 技术,程序员在键入代码时,v c 6 的编辑器能自动把属性、 参数信息、数据类型信息、代码信息罗列出来,供程序员选择并自动完成输入。这种技术源自于v b 5 , 现在已被应用到了v c 6 、v j 6 和i f _ , 5 中。有了它之后,程序员无需去记忆复杂的语法、参数和构件 属性,从而提高了编程效率。另一项典型的新技术是即编即调( e d i ta n dc o n t i n u e ) ,现在程序员可 以直接在调试过程中编辑代码,而不用像以前那样,需要先退出调试状态,然后编辑,重新编译连 接,井启动调试器,再跟踪到发生问题的地方。此外,v c 6 还具有动态更新类视图,延迟加载、支 持i e4 0 通用控件等等众多的新特性。 2 1 4m _ f c 类库简介h 5 i 对于一个v c 开发程序员来说,在学习v c 时不了解和学习m f c 类库是不完全的。尤其是m f c 中六大关键技术:m f c 程序的初始化过程、运行时类型信息、动态生成、序列化、消息映射和消息 传递。 类库是一个可以在应用程序中使用的相互关联的c + + 类的集合。与一般类库不同,m i c r o s o f t 基 本类库( m f c 库) 是一个w i n d o w s 应用程序框架,它定义了应用程序的结构并实现了标准的用户接 口。i v l f c 提供了管理窗口、菜单、对话框的代码,可实现基本的输入,输出和数据存储。由于有了 m f c 库,程序员编程的任务就是填写特定于自己应用的代码。简而言之,m f c 类库就是文档化的 类库,为程序开发提供一般的、基础的特性。然而,了解并掌握m f c 类库中类与类之间的相互作用 与关系是最为重要和关键的。因为整个应用程序说的通俗些就是通过各个类相互作用而构成的。 在v c 开发环境中,我们可以使用应用程序向导( a p p w i z a r d ) 来建立个应用程序,然后用可 视化的资源编辑器设计用户界面元素,由类向导( c l a s s w i z a r d ) 在界面元素与程序代码间建立联系, 并应用类库来实现程序。 东南大学硕十学位论文 同时,理解我t 1 自己编写的代码与m f c 框架代码之间的关系也是很重要的。在程序运行时,流 程的控制多数是由框架实现的。当用户选择菜单命令或者在视窗内编辑数据时,框架便从w i n d o w s 系统取得消息,并且负责管理消息循环,调用相应的消息处理函数,这些函数可能是我们自己编写 的,也可能是框架提供的。 只要是框架自己可以处理的事件,都可以完全不依赖程序员自己编写的代码。比如,框架知道 如何响应用户的关闭窗口命令并退出程序。在处理这些任务时,框架也通过消息处理函数和c + + 虚 函数给我们提供机会编写自己的消息处理代码。当然,对于应用程序专有的特殊事件,则必须由我 们自己编写代码,此时框架会调用我们的代码。 应用m f c 框架来构造应用程序时,程序员的角色就是提供应用程序专用的代码,并指定这些代 码是用来响应哪些消息和命令的,以使框架能够在消息和代码间建立联系。另外我们还可以从类库 中的类派生出应用程序自己的类,以重载和扩充基类的行为。 应用程序框架的核心是“文档一视图”结构。i v l f c 通过“文档一视图”结构为应用程序提供一 种将数据与视图相分离的存储方式。文档类的作用是将应用程序的数据保存在文档类对象中,以及 从磁盘文件中读或向磁盘文件中写数据。视图类的作用是显示数据和编辑数据。在文档、视图以及 应用程序框架的其余部分之问存在着非常复杂的相互作用过程。比如,当视图中显示的数据被编辑 修改后,便要及时更新文档对象中保存的内容,反之亦然。一个文档至少应该有一个与之对应的视 图。很多情况下,一个文档有多个视图与之对应。m f c 库则协调着文档、视图、框架窗口以及应用 程序对象之间的相互作用关系。 m f c 类可分为两种:从c o b j e c t 派生的类及非派生类。根类c o b j e c t 支持数据序列化、动态生 成、运行时类型信息以及集合类的兼容等功能。它有一个被保护的构造函数,因此必须由它的派生 类对它进行初始化。 m f c 应用结构类从c o b j e e _ 【派生,用于构造个应用的框架。它们对大多数应用提供了通用功 能。所有的m f c 应用都至少有两个对象:一个由c w i n a p p 派生出的应用对象和一些派生自c w n d 的主窗口对象( 大多数情况下。主窗口类派生自c f r a m e w n d 。c b i d i f r a m e w n d 或c d i a l o g ,所有这 些类又都派生自c w n d ) ,使用文档,视图结构的应用还包吉其他对象。m i c r o s o f t 基本类库支持在一 个应用中有多个执行线程。所有的应用都必须至少有一个线程。c w m a p p 对象使用的线程叫做“主 要”线程。c w i n t h r e a d 封装了一部分操作系统线程功能为了更简便地使用多个线程m f c 还提 供了同步对象类,提供一个操作啪2 同步对象的c + 十接口。 从c c m d t a r g e t 开始,m f c 中的派生类具有了消息映射和消息传递的功能。c c m d t a r g e t 封装了 m f c 的消息映射机制,是所有接收和响应消息类的基类。从它派生的命令目标对象包括c w i n a p p 、 c w n d 、c d o c t e m p l a t e 、c d o c u m c n t 、c v i e w 和它们的派生类都可以支持和处理命令消息及其路由。 所有的窗口都是由c w n d 类派生的。它负责处理与窗口相关的事件。在内部,它其实就是将窗 口句柄封装起来以及将与窗口相关的w i n d o w sa p i 函数操作相对应。作为一种特殊的窗口类 c d i a l o g ,它封装了对话框的功能。可以从c d i a l o g 派生自己的对话类,或者使用一种通用对话类作 为标准对话框,如打开或存储文件、打印、选择一种字体或颜色、初始化查找并替换操作、执行各 种o l e 相关操作的对话框等。而派生类中的框架窗口类是框架应用或应用中的一部分窗口。框架窗 口通常包含其它窗口,如视图、工具条和状态条。其中,c v i e w 是视图类的基类。它及其派生类是 一些子窗口,表示框架窗口的客户区视图负责显示数据,并接收文档的输入,以便编辑或选择数 据。而与之搭档的从c c m d t a r g e t 派生的文档类负责管理应用程序的数据、文件的读取和写入,并与 视图对象交互。 这里,“文档”一词并不意味着您只能创建字处理器和电子表格这样的应用程序,而是指可被应 用程序处理的数据,比如纸牌游戏应用程序,它的文档是在游戏区内的纸牌及位置数据。在这种情 况下,。视图”就是显示的纸牌,它把每张纸牌画在“文档”所确定的位置上。 文档、视图和框架三者之间是相互关联、相互协调的,彼此都包含了指向对方的指针。在v i s u a l c + + 中,文档类、与文档相关联的视图类以及为视图类提供显示的框架窗口类都是由文档模板创建 的。它们之间的联系是通过文档模板的构造函数来实现的。文档模板也是由c c m d t a r g c n 派生,分为 单文档模板和多文档模板两类,分别由c s i n g t e d o c t e m p l a t e 和c m u l t i d o c t e m p l a t e 表示。模板的作 用在于记录文档,视,框架之间的对应关系。还有一点就是模板可以记录应用程序可以打开的文件 的类型,当打开文件时会根据文档模板中的信息选择正确的文档和视图。模扳是个比较抽象的概 念,一般来说是不需要我们直接进行操作的。 m f c 类库还包括菜单类,绘图和打印类,数组、列表和映射类,文件和数据库类,i n t e m e t 和 网络类,o l e 类,调试和异常类以及简单的数据类型类等,是个非常庞大复杂的层次类库。 6 东南大学硕十学位论文 2 2 动态链接库 2 2 i 动态链接库的作用和优点叫i j 动态链接库( d y n a m i c l i n kl i b r a r y ,缩写为d l l ) 是一个可以披其它应用程序共享的程序模块, 其中封装了一些可以被共享的例程和资源。动态链接库文件的扩展名一般是d l l ,也有可能是d r y 、 s y s 和f o n ,它和可执行文件( e x e ) 非常类似,区别在于d l l 中虽然包禽了可执行代码却不能单独 执行,而应由w i n d o w s 应用程序直接或间接调用。 动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行 文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的e x e 文件中,该文件 包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷 贝,这样就浪费了宝贵的内存资源。而动态链接所调用的函数代码并没有被拷贝到应用程序的可执 行文件中去,而是仅仅在其中加入了被调用函数的描述信息( 往往是一些重定位信息) 。仅当应用程 序被装入内存并开始运行时,在w m d o w $ 的管理下,才在应用程序与相应的d l l 之间建立链接关 系。当要调用d l l 中的函数时,根据链接产生的重定位信息w i n d o w s 才转去执行d l l 中相应的 函数代码。 一般情况下,如果一个应用程序使用了动态链接库。w i n 3 2 系统保证内存中只有d l l 的一份拷 贝,这是通过内存映射文件实现的。d l l 首先被载入w i n 3 2 系统的全局堆栈,然后映射到调用这个 d l l 的进程地址空间。在w i n 3 2 系统中,每个进程拥有自己的3 2 位线性地址空间,如果一个d l l 被多个进程调用,每个进程都会收到该d l l 的一个映像。与1 6 位w i n d o w s 不同,在w i n 3 2 中d l l 可以看作是每个进程自己的代码。 从以上对动态链接库的介绍中我们不难看出,在应用程序中使用动态链接库所带来的优点主 要为以下三点: 共享代码、资源和数据使用d l l 的主要目的就是为了共享代码,d l l 的代码可以被所有的 w i n d o w s 应用程序共享节省内存空间。当然,d l l 有时也被用来实现资源和数据的共享。 隐藏实现的细节d l l 中的例程可以被应用程序访问,丽应用程序并不知道这些例程的细节。 访问只发生在二进制代码级,而不是在源代码级上。这样,便很好地对源代码进行了保护和保密。 另外,只要d l l 中的输出函数接口不变,应用程序和动态链接库d l l 就可分别进行维护和更新。 拓展开发工具的功能由于d l l 是与语言无关的,它实现的是二进制代码级上的共享,因此 可以创建一个d l l ,被d e i 口h i 、v b 或任何支持动态链接库的语言调用。这样如果一种语言存在不 足,就可以通过访问另一种语言创建的d l l 来弥补。 2 2 2 动态链接库的调用1 在v c 中,对于动态链接库的调用可分为两种,即静态调用和动态调用。 在静态调用方式中,需要用到在创建d ie 时一起创建的l i b 文件。该文件包含一个d l l 输出 的符号列表已经定位到真正的被调用函数入口地址的一小段代码,只要在此动态链接库中存在输出, 此l i b 文件便会一同生成。静态调用在编译时,需包含此l i b 文件,以便在实际调用处生成相应的 运行时调用代码,简单的说,对于d l l 中函数的调用,就是放置确定函数入口地址的代码。与动态 调用相比,所需的代码较少,因为一些处理已经根据l i b 文件在编译期完成了。所用到的d l l 在程 序运行时,已由加载程序加载进执行程序的地址空间中了。具体在调用时,只需在调用处放置相应 的函数并将参数传递进去就可以了,十分简单。 其实,在v c 开发环境中,设置了大量的系统动态链接库函数的静态调用。这些函数是应用程 序的支架,完成操作系统级的服务,比如包含用于管理内存、进程和线程的各个函数的k e r n e l 3 2 d l l 、 包含用于执行用户界面任务的各个函数的u s e r 3 2 d l l 以及包含用于画图和显示文本的各个函数的 g d l 3 2 d l l 等。由于这些库中的函数几乎在整个程序的运行期间都需要,所以昂合适采用静态调用方 式。 但静态调用方式也存在着一些不足,一是如果要加载的d l l 不存在或者d l l 中没有要引入的 例程,这时候程序就自动终止运行:二是d l l 一旦被加载就一直驻留在应用程序的地址空间,即使 d l l 己不再需要了。 7 东南大学硕士学位论文 动态调用方式却可解决以上问题。动态调用方式就是通过调用w i n d o w s 的a p i 函数,包括 l o a d l i b r a r y 函数、g e t p r o c a d d r e s s 函数以及f r e e l i b r a r y 函数,来动态的引入d l l 中的例程。它在 需要用到d l l 的时候才通过l o a d l i b r a r y 函数引入,用完后通过f r e e l i b r a r y 函数从内存中卸载,而 且通过调用g e t p r o c a d d r e s s 函数可以指定不同的例程。最重要的是,如果指定的d l l 出错,至多是 a p i 调用失败,不会导致程序终止。而且对于一些错误及异常,程序可通过调用a p i 函数g e t l a s t e r r o r 获取详细的错误信息,来进行相应的处理。比如,在某个动态链接库d l l f u n c ,d l l 中以及定义了一 个函数,其原型如下: v o i ds o m e f u n c ( i n t x ,i n t y ) : 那么,在应用程序中对此函数的调用代码可写成如下的形式: h m o d u l eh m o d u l e ; i n t x ,y ; 服,y 赋值操作 h m o d u l e = l o a d l i b r a r y ( “d l l f t m c d l l ”) :动态载入d l l f u n c d l l t y p e d e f v o i d (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025乌兰察布市青年就业见习人员招聘299人笔试模拟试题及答案解析
- 2025年秋季高中石油工程材料研究院有限公司招聘(20人)笔试参考题库附答案解析
- 2025重庆渝贸通供应链管理有限责任公司招聘6人笔试备考试题及答案解析
- 2025四川广安市广安区文化广播电视和旅游局招募文化人才服务支持艰苦边远地区和基层一线专项工作者2人笔试备考试题及答案解析
- 2026中国船舶集团第七一五研究所校园招聘笔试参考题库附答案解析
- 2025年肿瘤内科肿瘤综合治疗方案设计模拟测试答案及解析
- 2025江西师范大学附属博文实验学校见习教师招聘1人笔试模拟试题及答案解析
- 湖北中医药大学2025年专项公开招聘专职辅导员12人笔试备考题库及答案解析
- 2025年急诊医学处理突发事件考核答案及解析
- 2025年心血管内科心律失常急救处理模拟测试卷答案及解析
- 2024年江苏省射阳县事业单位招聘35人历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 标签打印机的快速批量打印方法
- GB/T 1504-2024铸铁轧辊
- 食品行业创新与研发
- 电力各种材料重量表总
- 樊荣-《医疗质量管理办法》核心制度要点解析与案
- 男性不育症诊治指南课件
- 《声声慢》省赛一等奖
- 消防安全教育培训记录表
- 国家开放大学《实用管理基础》形考任务1-4参考答案
- 2023混凝土结构耐久性电化学修复技术规程
评论
0/150
提交评论