cBuilder工程的基本结构PPT课件_第1页
cBuilder工程的基本结构PPT课件_第2页
cBuilder工程的基本结构PPT课件_第3页
cBuilder工程的基本结构PPT课件_第4页
cBuilder工程的基本结构PPT课件_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、1C+Builder工程的基本结构工程的基本结构 一、工程 1.1 工程概念 工程是为了实现特定功能所需的文件集合。 这个集合是一个特殊的文件夹,由工程文件进行描述和管理。第1页/共35页21.2 工程的要素工程的要素窗体单元资源选项C+Builder工程的基本结构工程的基本结构第2页/共35页3C+Builder工程的基本结构工程的基本结构1.3 项目的项目的主要文件主要文件工程描述文件(*.bpr)窗体文件(*.dfm)单元文件(*.cpp)资源文件(*.res)工程代码文件(*.cpp)第3页/共35页4主要文件 简介工程描述文件 (.bpr)新建工程时由系统自动创建单元文件 (.cpp

2、)一个窗体有一个单元。单元文件可以没有窗体,用以保存公共元素。窗体文件 (.dfm)用于记录窗体及窗体上控件的基本信息资源文件 (.res)保存图标、位图等信息工程代码文件 (*.cpp)新建工程时由系统自动创建头文件(*.h),类定义文件第4页/共35页5q1.3.1 工程描述文件 工程描述文件的作用:用于描述宏定义,编译选项,连接选项,文件清单等。结构如下: . C+Builder工程的基本结构第5页/共35页C+Builder工程的基本结构 . . /FILELIST .6第6页/共35页7q1.3.2 工程代码文件 整个工程的总入口,用于初始化工程,创建窗体,启动工程。示例代码如下:#

3、include #pragma hdrstop USEFORM(Unit1.cpp, Form1); WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) C+Builder工程的基本结构第7页/共35页C+Builder工程的基本结构 try Application-Initialize(); Application-CreateForm(_classid(TForm1), &Form1); Application-Run(); catch (Exception &exception) Application-ShowExcepti

4、on(&exception); 8第8页/共35页C+Builder工程的基本结构 catch (.) try throw Exception(); catch (Exception &exception) Application-ShowException(&exception); return 0;9第9页/共35页10q1.3.3 单元文件 (.cpp) 为窗体类的实现文件,其中有窗体的构造方法,和窗体上各个控件的事件响应方法。代码如下:#include #pragma hdrstop#include Unit1.h#include Stdio.h#include

5、 iostream.h“#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1;C+Builder工程的基本结构第10页/共35页C+Builder工程的基本结构_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner)void _fastcall TForm1:Button1Click(TObject *Sender) 11第11页/共35页12n.4 窗体文件窗体文件(.dfm) 窗体文件用于定义窗体,及窗体上组件的属性。 在窗体上单击鼠标右键,在弹出菜单中选择 V

6、iew as Text,即可看到窗体文件的内容。 在窗体代码窗口上单击鼠标右键,在弹出菜单中选择 View as Form。 C+Builder工程的基本结构第12页/共35页13object Form1: TForm1 Left = 234 Top = 124 Width = 696 Height = 480 object Button1: TButton Left = 32 Top = 400 OnClick = Button1Click endendC+Builder工程的基本结构第13页/共35页14 1.3.6 头文件(*.h) 头文件用来声明类。代码示例如下:#ifndef Uni

7、t1H#define Unit1H#include #include #include #include #include C+Builder工程的基本结构第14页/共35页class TForm1 : public TForm_published:/ IDE-managed Components TButton *Button1; TLabel *Label1; TMainMenu *MainMenu1;private:/ User declarationspublic:/ User declarations _fastcall TForm1(TComponent* Owner);exter

8、n PACKAGE TForm1 *Form1;#endif15第15页/共35页 二、工程需要保存的文件*.bpr*.cpp*.dfm*.res*.h小练习: 新建一个项目,编译运行,关闭项目,然后到项目文件夹下,删除上述文件类型之外的文件,然后打开项目,看看能否从新编译运行。16C+Builder工程的基本结构第16页/共35页#pragma 预处理指令详解 一、主要功能 对每个编译器给出了一方法,在保持与C和C+语言完全兼容的情况下,给出主机或操作系统专有的特征。 编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 二、命令格式 #pragma para其中:para为命令参数

9、。17第17页/共35页#pragma 预处理指令详解 三、常见参数和意义l3.1 message 在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #pragma message(消息文本) 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 如果在程序中定义了许多宏,用于控制源代码版本,则有可能会忘记有没有正确的设置这些宏,此时可以用这条指令在编译的时候就进行检查。18第18页/共35页#pragma 预处理指令详解假设希望判断有没有在源代码的什么地方定义了_X86这个宏,可以用下面的方法: #ifdef _X86 #pragma messa

10、ge(_X86 macro activated!) #endif 定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示_86 macro activated!。就会知道有没有定义一些特定的宏了。19第19页/共35页#pragma 预处理指令详解 格式: #pragma code_seg( section-name , section-class ) 它能够设置程序中函数代码存放的代码段,当开发驱动程序的时候就会使用到它。 20第20页/共35页#pragma 预处理指令详解l3.3 once 只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就

11、已经有了,但是考虑到兼容性并没有太多的使用它。21第21页/共35页#pragma 预处理指令详解l3.4 hdrstop 表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。有时单元之间有依赖关系,比如单元 A 依赖单元 B,所以单元 B 要先于单元 A 编译。 可以用#pragma startup 指定编译优先级,如果使用了#pragma package(smart_init),BCB就会根据优先级的大小先后编译。 22第22页/共35页#pragma 预处理指令详解l

12、3.5 resource *.dfm 表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体外观的定义。l3.6 warning( disable: 4507 34; once: 4385; error: 164 ) 不显示4507和34号警告信息 ,4385号警告信息仅报告一次,把164号警告信息作为一个错误。 pragma warning 支持的其它下格式: 23第23页/共35页#pragma 预处理指令详解 #pragma warning( push )保存所有警告信息的现有的警告状态。 #pragma warning( push, n )保存所有警告信息的现有的警告状态,并且把全

13、局警告等级设定为n(1-4)。 #pragma warning( pop )从栈中弹出最后一个警告信息,在入栈和出栈之间所作的一切改动取消。24第24页/共35页#pragma 预处理指令详解l3.7 comment(.) 该指令将一个注释记录放入一个对象文件或可执行文件中。 常用的lib关键字,可以帮我们连入一个库文件。如: #pragma comment(lib, comctl32.lib) #pragma comment(lib, vfw32.lib) #pragma comment(lib, wsock32.lib)25第25页/共35页#pragma 预处理指令详解l3.8 #pra

14、gma loop_opt(on|off) 激活循环|终止循环优化功能。l3.9 #pragma warn +100 |-100 启用或者禁止:“变量已定义但未使用的”警告信息。 26第26页/共35页#pragma 预处理指令详解27第27页/共35页#pragma 预处理指令详解内存对齐问题 计算机系统对基本类型数据在内存中存放的位置有限制,要求这些数据的首地址的值是某个数 k(通常它为4或8)的倍数,这就是内存对齐,而这个 k 则被称为该数据类型的对齐模数(alignment modulus)。 Win32平台下的微软 C 编译器(cl.exe for 80 x86)在默认情况下采用如下的

15、对齐规则: 任何基本数据类型 T 的对齐模数就是T的大小,即sizeof(T)。比如对于double类型(8字节),就要求该类型数据的地址总是8的倍数。28第28页/共35页#pragma 预处理指令详解 Linux下的GCC的规则是:任何2字节大小的数据类的对齐模数是2,而其它所有超过2字节的数据类型都以4为对齐模数。 ANSI C规定一种结构类型的大小是它所有字段的大小以及字段之间或字段尾部的填充区大小之和。 填充区就是为了使结构体字段满足内存对齐要求而额外分配给结构体的空间。 ANSI C标准规定结构体类型的对齐要求不能比它所有字段中要求最严格的那个宽松,可以更严格。29第29页/共35

16、页#pragma 预处理指令详解如何使用c/c+中的对齐选项 vc6中的编译选项有 /Zp1|2|4|8|16 ,/Zp1表示以1字节边界对齐,相应的,/Zpn表示以n字节边界对齐 n字节边界对齐的意思是说,一个成员的地址必须安排在成员的尺寸的整数倍地址上或者是n的整数倍地址上,取它们中的最小值。也就是: min (sizeof( member),n)30第30页/共35页#pragma 预处理指令详解l3.10 #pragma pack( n ),(n:1,2,4,8,16) 指定结构和联合成员的紧凑对齐。而一个完整的转换单元的结构和联合的紧凑对齐由/Zp 选项设置。紧凑对齐用pack编译指

17、示在数据说明层设置。该编译指示在其出现后的第一个结构或联合说明处生效。 该编译指示对定义无效。 第一个结构成员之后的每个结构成员都被存储在更小的成员类型或 n 字节界限内。 如果你使用无参量的#pragma pack, 结构成员被紧凑为以/Zp 指定的值。该缺省/Zp 紧凑值为 /Zp8 。31第31页/共35页#pragma 预处理指令详解l #pragma pack( push|pop ,identifier, n) 若不同的组件使用pack编译指示指定不同的紧凑对齐, 这个语法允许你把程序组件组合为一个单独的转换单元。 带push参量的pack编译指示的每次出现将当前的紧凑对齐存储到一个内部编译器堆栈中。 编译指示的参量表从左到右读取。如果你使用push, 则当前紧凑值被存储起来; 值是一样的。32第32页/共35页#pragma 预处理指令详解如果你给出一个n 的值, 该值将成为新的紧凑值。若指定一个标识符, 即你选定一个名称, 则该标识符将和这个新的的紧凑值联系起来。 带一个pop参量的pack编译指示的每次出现都会检索内部编译器堆栈顶的值,并且使该值为新的紧凑对齐值。如果使用pop参量且内部编译器堆栈是空的,则紧凑值为命令行给定的值, 并且

温馨提示

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

评论

0/150

提交评论