cBuilder工程的基本结构.ppt

上传人:M****1 文档编号:567921301 上传时间:2024-07-22 格式:PPT 页数:35 大小:251.51KB
返回 下载 相关 举报
cBuilder工程的基本结构.ppt_第1页
第1页 / 共35页
cBuilder工程的基本结构.ppt_第2页
第2页 / 共35页
cBuilder工程的基本结构.ppt_第3页
第3页 / 共35页
cBuilder工程的基本结构.ppt_第4页
第4页 / 共35页
cBuilder工程的基本结构.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《cBuilder工程的基本结构.ppt》由会员分享,可在线阅读,更多相关《cBuilder工程的基本结构.ppt(35页珍藏版)》请在金锄头文库上搜索。

1、1C+BuilderC+Builder工程的基本结构工程的基本结构一、工程一、工程1.1 工程概念工程概念工程是工程是为了了实现特定功能所需的文件特定功能所需的文件集合。集合。这个集合是一个特殊的文件个集合是一个特殊的文件夹,由工程,由工程文件文件进行描述和管理。行描述和管理。2窗体单元资源选项C+BuilderC+Builder工程的基本结构工程的基本结构3C+BuilderC+Builder工程的基本结构工程的基本结构工程描述文件(*.bpr)窗体文件窗体文件(*.dfm)单元文件(*.cpp)资源文件资源文件(*.res)工程代码文件(*.cpp)4主要文件 简介工程描述文件 (.bpr

2、)新建工程时由系统自动创建单元文件 (.cpp)一个窗体有一个单元。单元文件可以没有窗体,用以保存公共元素。窗体文件 (.dfm)用于记录窗体及窗体上控件的基本信息资源文件 (.res)保存图标、位图等信息工程代码文件 (*.cpp)新建工程时由系统自动创建头文件(*.h),类定义文件5q1.3.1 工程描述文件工程描述文件 工程描述文件的作用:用于描述宏定工程描述文件的作用:用于描述宏定义,编译选项,连接接选项,文件清,文件清单等。等。结构如下:构如下: . C+Builder工程的基本结构C+BuilderC+Builder工程的基本结构工程的基本结构 OPTIONS . . . . /F

3、ILELIST /FILELIST . .67q1.3.2 工程代工程代码文件文件 整个工程的整个工程的总入口,用于初始化工程,入口,用于初始化工程,创建窗体,建窗体,启启动工程。示例代工程。示例代码如下:如下:#include #pragma hdrstop USEFORM(Unit1.cpp, Form1); WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) C+Builder工程的基本结构C+BuilderC+Builder工程的基本结构工程的基本结构 try Application-Initialize(); Application-Cr

4、eateForm(_classid(TForm1), &Form1); Application-Run(); catch (Exception &exception) Application-ShowException(&exception); 8C+BuilderC+Builder工程的基本结构工程的基本结构 catch (.) try throw Exception(); catch (Exception &exception) Application-ShowException(&exception); return 0;910q1.1.3.3 单元文件元文件(.(.cpp) 为窗体窗体

5、类的的实现文件,其中有窗体的构造方法,和窗文件,其中有窗体的构造方法,和窗体上各个控件的事件响体上各个控件的事件响应方法。代方法。代码如下:如下:#include #pragma hdrstop#include Unit1.h#include Stdio.h#include iostream.h“#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1;C+Builder工程的基本结构C+BuilderC+Builder工程的基本结构工程的基本结构_fastcall TForm1:TForm1(TComponent* Owne

6、r) : TForm(Owner)void _fastcall TForm1:Button1Click(TObject *Sender) 1112n1.31.3.4 窗体文件窗体文件(.(.dfm) 窗体文件用于定窗体文件用于定义窗体,及窗体上窗体,及窗体上组件的属性。件的属性。1.1.查看窗体代看窗体代码的操作的操作在窗体上在窗体上单击鼠鼠标右右键,在,在弹出菜出菜单中中选择 View as Text,即可看到窗体文件的内容。即可看到窗体文件的内容。2.2.从窗体代从窗体代码窗口返回窗体窗口的操作窗口返回窗体窗口的操作在窗体代在窗体代码窗口上窗口上单击鼠鼠标右右键,在,在弹出菜出菜单中中选择

7、 View as Form。C+Builder工程的基本结构13object Form1: TForm1 Left = 234 Top = 124 Width = 696 Height = 480 object Button1: TButton Left = 32 Top = 400 OnClick = Button1Click endendC+Builder工程的基本结构141.3.6 头文件(文件(* *.h) 头文件用来声明文件用来声明类。代。代码示例如下:示例如下:#ifndef Unit1H#define Unit1H#include #include #include #inclu

8、de #include C+Builder工程的基本结构class TForm1 : public TForm_published:/ IDE-managed Components TButton *Button1; TLabel *Label1; TMainMenu *MainMenu1;private:/ User declarationspublic:/ User declarations _fastcall TForm1(TComponent* Owner);extern PACKAGE TForm1 *Form1;#endif15二、工程需要保存的文件二、工程需要保存的文件* *.b

9、pr*.cpp*.dfm*.res*.h小小练习: 新建一个新建一个项目,目,编译运行,关运行,关闭项目,然后到目,然后到项目目文件文件夹下,下,删除上述文件除上述文件类型之外的文件,然后打开型之外的文件,然后打开项目,看看能否从新目,看看能否从新编译运行。运行。16C+BuilderC+Builder工程的基本结构工程的基本结构#pragma #pragma 预处理指令详解预处理指令详解一、主要功能一、主要功能对每个每个编译器器给出了一方法出了一方法,在保持与在保持与C和和C+语言完言完全兼容的情况下全兼容的情况下,给出主机或操作系出主机或操作系统专有的特征。有的特征。编译指示是机器或操作系

10、指示是机器或操作系统专有的有的,且且对于每个于每个编译器都是不同的。器都是不同的。二、命令格式二、命令格式 #pragma para其中:其中:para为命令参数。命令参数。17#pragma #pragma 预处理指令详解预处理指令详解三、常三、常见参数和意参数和意义l3.1 message在在编译信息信息输出窗口中出窗口中输出相出相应的信息,的信息,这对于源代于源代码信息的控制是非常重要的。其使用方法信息的控制是非常重要的。其使用方法为:#pragma message(消息文本消息文本) 当当编译器遇到器遇到这条指令条指令时就在就在编译输出窗口中将消出窗口中将消息文本打印出来。息文本打印出

11、来。如果在程序中定如果在程序中定义了了许多宏,用于控制源代多宏,用于控制源代码版本版本,则有可能会忘有可能会忘记有没有正确的有没有正确的设置置这些宏,此些宏,此时可以可以用用这条指令在条指令在编译的的时候就候就进行行检查。18#pragma #pragma 预处理指令详解预处理指令详解假假设希望判断有没有在源代希望判断有没有在源代码的什么地方定的什么地方定义了了_X86这个宏个宏,可以用下面的方法可以用下面的方法: #ifdef _X86 #pragma message(_X86 macro activated!) #endif 定定义了了_X86这个宏以后,个宏以后,应用程序在用程序在编译时

12、就会在就会在编译输出窗口里出窗口里显示示_86 macro activated!。就会。就会知道有没有定知道有没有定义一些特定的宏了一些特定的宏了。19#pragma #pragma 预处理指令详解预处理指令详解l3.2code_seg 格式:格式:#pragma code_seg( section-name , section-class ) 它能它能够设置程序中函数代置程序中函数代码存放的代存放的代码段,当开段,当开发驱动程序的程序的时候就会使用到它。候就会使用到它。20#pragma #pragma 预处理指令详解预处理指令详解l3.3 once 只要在只要在头文件的最开始加入文件的最开

13、始加入这条指令就能条指令就能够保保证头文件被文件被编译一次,一次,这条指令条指令实际上在上在VC6中就已中就已经有了,有了,但是考但是考虑到兼容性并没有太多的使用它。到兼容性并没有太多的使用它。21#pragma #pragma 预处理指令详解预处理指令详解l3.4 hdrstop 表示表示预编译头文件到此文件到此为止,后面的止,后面的头文件不文件不进行行预编译。BCB可以可以预编译头文件以加快文件以加快链接的速度,但接的速度,但如如果所有果所有头文件都文件都进行行预编译又可能占太多磁又可能占太多磁盘空空间,所,所以使用以使用这个个选项排除一些排除一些头文件。有文件。有时单元之元之间有依有依赖

14、关系,比如关系,比如单元元 A 依依赖单元元 B,所以,所以单元元 B 要先于要先于单元元 A 编译。可以用可以用#pragma startup 指定指定编译优先先级,如果使,如果使用了用了#pragma package(smart_init),BCB就会根据就会根据优先先级的大小先后的大小先后编译。22#pragma #pragma 预处理指令详解预处理指令详解l3.5 resource *.dfm 表示把表示把* *.dfm文件中的文件中的资源加入工程。源加入工程。* *.dfm中包括窗中包括窗体外体外观的定的定义。l3.6 warning( disable: 4507 34; once:

15、 4385; error: 164 ) 不不显示示4507和和34号警告信息号警告信息 ,4385号警告信息号警告信息仅报告一次,把告一次,把164号警告信息作号警告信息作为一个一个错误。pragma warning 支持的其它下格式:支持的其它下格式:23#pragma #pragma 预处理指令详解预处理指令详解#pragma warning( push )保存所有警告信息的保存所有警告信息的现有的警告状有的警告状态。#pragma warning( push, n )保存所有警告信息的保存所有警告信息的现有的警告状有的警告状态,并且把全局警告等,并且把全局警告等级设定定为n(1-4)。#

16、pragma warning( pop )从从栈中中弹出最后一个警告出最后一个警告信息,在入信息,在入栈和出和出栈之之间所作的一切改所作的一切改动取消。取消。24#pragma #pragma 预处理指令详解预处理指令详解l3.7 comment(.) 该指令将一个注指令将一个注释记录放入一个放入一个对象文件或可象文件或可执行文行文件中。件中。常用的常用的lib关关键字,可以帮我字,可以帮我们连入一个入一个库文件。如:文件。如:#pragma comment(lib, comctl32.lib) #pragma comment(lib, vfw32.lib) #pragma comment(l

17、ib, wsock32.lib)25#pragma #pragma 预处理指令详解预处理指令详解l3.8 #pragma loop_opt(on|off) 激活循激活循环|终止循止循环优化功能。化功能。l3.9 #pragma warn +100 |-100 启用或者禁止:启用或者禁止:“变量已定量已定义但未使用的但未使用的”警告信息。警告信息。26#pragma #pragma 预处理指令详解预处理指令详解27#pragma #pragma 预处理指令详解预处理指令详解内存内存对齐问题计算机系算机系统对基本基本类型数据在内存中存放的位置有型数据在内存中存放的位置有限制,要求限制,要求这些数据

18、的首地址的些数据的首地址的值是某个数是某个数 k(通常它通常它为4或或8)的倍数,的倍数,这就是内存就是内存对齐,而,而这个个 k 则被称被称为该数据数据类型的型的对齐模数模数(alignment modulus)。Win32平台下的微平台下的微软 C 编译器器(cl.exe for 80x86)在默在默认情况下采用如下的情况下采用如下的对齐规则: 任何基本数据任何基本数据类型型 T 的的对齐模数就是模数就是T的大小,即的大小,即sizeof(T)。比如。比如对于于double类型型(8字字节),就要求,就要求该类型数据的地址型数据的地址总是是8的倍数。的倍数。28#pragma #pragm

19、a 预处理指令详解预处理指令详解Linux下的下的GCC的的规则是:任何是:任何2字字节大小的数据大小的数据类的的对齐模数是模数是2,而其它所有超,而其它所有超过2字字节的数据的数据类型都以型都以4为对齐模数。模数。ANSI C规定一种定一种结构构类型的大小是它所有字段的大型的大小是它所有字段的大小以及字段之小以及字段之间或字段尾部的填充区大小之和。或字段尾部的填充区大小之和。填充区就是填充区就是为了使了使结构体字段构体字段满足内存足内存对齐要求而要求而额外分配外分配给结构体的空构体的空间。 ANSI C标准准规定定结构体构体类型的型的对齐要求不能比它所要求不能比它所有字段中要求最有字段中要求

20、最严格的那个格的那个宽松,可以更松,可以更严格。格。29#pragma #pragma 预处理指令详解预处理指令详解如何使用如何使用c/c+中的中的对齐选项vc6中的中的编译选项有有 /Zp1|2|4|8|16 ,/Zp1表示表示以以1字字节边界界对齐,相,相应的,的,/Zpn表示以表示以n字字节边界界对齐 n字字节边界界对齐的意思是的意思是说,一个成,一个成员的地址必的地址必须安安排在成排在成员的尺寸的整数倍地址上或者是的尺寸的整数倍地址上或者是n的整数倍地址上的整数倍地址上,取它,取它们中的最小中的最小值。也就是:也就是:min (sizeof( member),n)30#pragma #

21、pragma 预处理指令详解预处理指令详解l3.10 #pragma pack( n ),(n:1,2,4,8,16) 指定指定结构和构和联合成合成员的的紧凑凑对齐。而一个完整的。而一个完整的转换单元的元的结构和构和联合的合的紧凑凑对齐由由/Zp 选项设置。置。紧凑凑对齐用用pack编译指示在数据指示在数据说明明层设置。置。该编译指示在指示在其出其出现后的第一个后的第一个结构或构或联合合说明明处生效。生效。该编译指示指示对定定义无效。无效。第一个第一个结构成构成员之后的每个之后的每个结构成构成员都被存都被存储在更在更小的成小的成员类型或型或 n 字字节界限内。界限内。如果你使用无参量的如果你使

22、用无参量的#pragma pack, 结构成构成员被被紧凑凑为以以/Zp 指定的指定的值。该缺省缺省/Zp 紧凑凑值为 /Zp8 。31#pragma #pragma 预处理指令详解预处理指令详解l3.11 #pragma pack( push|pop ,identifier, n) 若不同的若不同的组件使用件使用pack编译指示指定不同的指示指定不同的紧凑凑对齐, 这个个语法允法允许你把程序你把程序组件件组合合为一个一个单独的独的转换单元。元。带push参量的参量的pack编译指示的每次出指示的每次出现将当前的将当前的紧凑凑对齐存存储到一个内部到一个内部编译器堆器堆栈中。中。编译指示的参量表

23、从左到右指示的参量表从左到右读取。如果你使用取。如果你使用push, 则当前当前紧凑凑值被存被存储起来起来; 值是一是一样的。的。32#pragma #pragma 预处理指令详解预处理指令详解如果你如果你给出一个出一个n 的的值, 该值将成将成为新的新的紧凑凑值。若指。若指定一个定一个标识符符, 即你即你选定一个名称定一个名称, 则该标识符将和符将和这个新的的个新的的紧凑凑值联系起来。系起来。带一个一个pop参量的参量的pack编译指示的每次出指示的每次出现都会都会检索索内部内部编译器堆器堆栈顶的的值,并且使并且使该值为新的新的紧凑凑对齐值。如果使用如果使用pop参量且内部参量且内部编译器堆

24、器堆栈是空的是空的,则紧凑凑值为命令行命令行给定的定的值, 并且将并且将产生一个警告信息。生一个警告信息。33#pragma #pragma 预处理指令详解预处理指令详解若使用若使用pop且指定一个且指定一个n的的值, 该值将成将成为新的新的紧凑凑值。若你使用。若你使用pop 且指定一个且指定一个标识符符, 所有存所有存储在堆在堆栈中的中的值将从将从栈中中删除除, 直到找到一个匹配的直到找到一个匹配的标识符符, 这个与个与标识符相关的符相关的紧凑凑值也从也从栈中移出中移出, 并且并且这个个仅在在标识符入符入栈之前存在的之前存在的紧凑凑值成成为新的新的紧凑凑值。如果未。如果未找到匹配的找到匹配的

25、标识符符, 将使用命令行将使用命令行设置的置的紧凑凑值, 并且并且将将产生一个一生一个一级警告。缺省警告。缺省紧凑凑对齐为8 。pack编译指示的新的增指示的新的增强功能功能让你你编写写头文件文件, 确保确保在遇到在遇到该头文件的前后的文件的前后的紧凑凑对齐。34#pragma #pragma 预处理指令详解预处理指令详解l3.12 栈内存内存对齐在在vc6中中栈的的对齐方式不受方式不受结构成构成员对齐选项的影的影响。它响。它总是保持是保持对齐,而且,而且对齐在在4字字节边界上。界上。四、四、编译器器对#pragma指令的解指令的解释 每个每个编译器器对#pragma的的实现不同,在一个不同,在一个编译器中器中有效在有效在别的的编译器中几乎无效。可从器中几乎无效。可从编译器的文档中器的文档中查看。看。35

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号