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

下载本文档

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

文档简介

1、cBuilder工程的基本结构 2 1.2 工程的要素工程的要素 窗体单元 资源 选项 C+BuilderC+Builder工程的基本结构工程的基本结构 3 C+BuilderC+Builder工程的基本结构工程的基本结构 1.3 项目的项目的 主要文件主要文件 工程描述文件(*.bpr) 窗体文件窗体文件(*.dfm) 单元文件(*.cpp) 资源文件资源文件(*.res) 工程代码文件(*.cpp) 4 主 要 文 件 简 介 工程描述文件 (.bpr) 新建工程时由系统自动创建 单元文件 (.cpp) 一个窗体有一个单元。单元文件可以 没有窗体,用以保存公共元素。 窗体文件 (.dfm)

2、 用于记录窗体及窗体上控件的基本信息 资源文件 (.res) 保存图标、位图等信息 工程代码文件 (*.cpp) 新建工程时由系统自动创建 头文件(*.h),类定义文件 5 q 1.3.1 1.3.1 工程描述文件工程描述文件 工程描述文件的作用:用于描述宏定义,编译选项,工程描述文件的作用:用于描述宏定义,编译选项, 连接选项,文件清单等。结构如下:连接选项,文件清单等。结构如下: . . C+Builder工程的基本结构 6 C+BuilderC+Builder工程的基本结构工程的基本结构 . . . . / / . . 7 q 1.3.2 1.3.2 工程代码文件工程代码文件 整个工程的

3、总入口,用于初始化工程,创建窗体,整个工程的总入口,用于初始化工程,创建窗体, 启动工程。示例代码如下:启动工程。示例代码如下: #include #include #pragma hdrstop#pragma hdrstop USEFORM(Unit1.cpp, Form1); USEFORM(Unit1.cpp, Form1); WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) C+Builder工程的基本结构 8 C+BuilderC+Buil

4、der工程的基本结构工程的基本结构 try try Application-Initialize(); Application-Initialize(); Application-CreateForm(_classid(TForm1), Application-CreateForm(_classid(TForm1), Application-Run(); Application-Run(); catch (Exception Application-ShowException( 9 C+BuilderC+Builder工程的基本结构工程的基本结构 catch (.) catch (.) try

5、 try throw Exception(); throw Exception(); catch (Exception Application-ShowException( return 0; return 0; 10 q 1.1.3.3 3.3 单元文件单元文件 (. (.cpp)cpp) 为窗体类的实现文件,其中有窗体的构造方法,和窗为窗体类的实现文件,其中有窗体的构造方法,和窗 体上各个控件的事件响应方法。代码如下:体上各个控件的事件响应方法。代码如下: #include #include #pragma hdrstop#pragma hdrstop #include Unit1.h#i

6、nclude Unit1.h #include Stdio.h#include Stdio.h #include iostream.h#include iostream.h“ #pragma package(smart_init)#pragma package(smart_init) #pragma resource #pragma resource * *.dfm.dfm TForm1 TForm1 * *Form1;Form1; C+Builder工程的基本结构 11 C+BuilderC+Builder工程的基本结构工程的基本结构 _fastcall TForm1:TForm1(TCom

7、ponent_fastcall TForm1:TForm1(TComponent* * Owner) Owner) : TForm(Owner) : TForm(Owner) void _fastcall TForm1:Button1Click(TObject void _fastcall TForm1:Button1Click(TObject * *Sender)Sender) 12 n1.31.3.4 .4 窗体文件窗体文件(.(.dfm)dfm) 窗体文件用于定义窗体,及窗体上组件的属性。窗体文件用于定义窗体,及窗体上组件的属性。 1.1.查看窗体代码的操作查看窗体代码的操作 在窗体上单

8、击鼠标右键,在弹出菜单中选择在窗体上单击鼠标右键,在弹出菜单中选择 View View as Textas Text,即可看到窗体文件的内容。即可看到窗体文件的内容。 2.2.从窗体代码窗口返回窗体窗口的操作从窗体代码窗口返回窗体窗口的操作 在窗体代码窗口上单击鼠标右键,在弹出菜单中选在窗体代码窗口上单击鼠标右键,在弹出菜单中选 择择 View as FormView as Form。 C+Builder工程的基本结构 13 object Form1: TForm1object Form1: TForm1 Left = 234 Left = 234 Top = 124 Top = 124 Wi

9、dth = 696 Width = 696 Height = 480 Height = 480 object Button1: TButton object Button1: TButton Left = 32 Left = 32 Top = 400 Top = 400 OnClick = Button1Click OnClick = Button1Click end end endend C+Builder工程的基本结构 14 1.3.6 1.3.6 头文件(头文件(* *.h).h) 头文件用来声明类。代码示例如下:头文件用来声明类。代码示例如下: #ifndef Unit1H#ifnde

10、f Unit1H #define Unit1H#define Unit1H #include #include #include #include #include #include #include #include #include #include C+Builder工程的基本结构 15 class TForm1 : public TFormclass TForm1 : public TForm _published:/ IDE-managed Components_published:/ IDE-managed Components TButton TButton * *Button1

11、;Button1; TLabel TLabel * *Label1;Label1; TMainMenu TMainMenu * *MainMenu1;MainMenu1; private:/ User declarationsprivate:/ User declarations public:/ User declarationspublic:/ User declarations _fastcall TForm1(TComponent _fastcall TForm1(TComponent* * Owner); Owner); ; extern PACKAGE TForm1 extern

12、PACKAGE TForm1 * *Form1;Form1; #endif#endif 16 二、工程需要保存的文件二、工程需要保存的文件 * *.bpr.bpr * *.cpp.cpp * *.dfm.dfm * *.res.res * *.h.h 小练习:小练习: 新建一个项目,编译运行,关闭项目,然后到项目新建一个项目,编译运行,关闭项目,然后到项目 文件夹下,删除上述文件类型之外的文件,然后打开项文件夹下,删除上述文件类型之外的文件,然后打开项 目,看看能否从新编译运行。目,看看能否从新编译运行。 C+BuilderC+Builder工程的基本结构工程的基本结构 17 #pragma

13、#pragma 预处理指令详解预处理指令详解 一、主要功能一、主要功能 对每个编译器给出了一方法对每个编译器给出了一方法, ,在保持与在保持与C C和和C+C+语言完语言完 全兼容的情况下全兼容的情况下, ,给出主机或操作系统专有的特征。给出主机或操作系统专有的特征。 编译指示是机器或操作系统专有的编译指示是机器或操作系统专有的, ,且对于每个编译且对于每个编译 器都是不同的。器都是不同的。 二、命令格式二、命令格式 #pragma para #pragma para 其中:其中:parapara为命令参数。为命令参数。 18 #pragma #pragma 预处理指令详解预处理指令详解 三、

14、常见参数和意义三、常见参数和意义 l 3.1 message3.1 message 在编译信息输出窗口中输出相应的信息,这对于源代在编译信息输出窗口中输出相应的信息,这对于源代 码信息的控制是非常重要的。其使用方法为:码信息的控制是非常重要的。其使用方法为: #pragma message(#pragma message(消息文本消息文本) ) 当编译器遇到这条指令时就在编译输出窗口中将消当编译器遇到这条指令时就在编译输出窗口中将消 息文本打印出来。息文本打印出来。 如果在程序中定义了许多宏,用于控制源代码版本如果在程序中定义了许多宏,用于控制源代码版本 ,则有可能会忘记有没有正确的设置这些宏

15、,此时可以,则有可能会忘记有没有正确的设置这些宏,此时可以 用这条指令在编译的时候就进行检查。用这条指令在编译的时候就进行检查。 19 #pragma #pragma 预处理指令详解预处理指令详解 假设希望判断有没有在源代码的什么地方定义了假设希望判断有没有在源代码的什么地方定义了_X86_X86这这 个宏个宏, ,可以用下面的方法可以用下面的方法: : #ifdef _X86 #ifdef _X86 #pragma message(_X86 macro activated!) #pragma message(_X86 macro activated!) #endif #endif 定义了定义

16、了_X86_X86这个宏以后,应用程序在编译时就会在这个宏以后,应用程序在编译时就会在 编译输出窗口里显示编译输出窗口里显示_86 macro activated!_86 macro activated!。就会。就会 知道有没有定义一些特定的宏了知道有没有定义一些特定的宏了。 20 #pragma #pragma 预处理指令详解预处理指令详解 l 3.2code_seg3.2code_seg 格式:格式: #pragma code_seg( section-name , #pragma code_seg( section-name , section-class ) section-class

17、 ) 它能够设置程序中函数代码存放的代码段,当开发驱它能够设置程序中函数代码存放的代码段,当开发驱 动程序的时候就会使用到它。动程序的时候就会使用到它。 21 #pragma #pragma 预处理指令详解预处理指令详解 l 3.3 once 3.3 once 只要在头文件的最开始加入这条指令就能够保证头只要在头文件的最开始加入这条指令就能够保证头 文件被编译一次,这条指令实际上在文件被编译一次,这条指令实际上在VC6VC6中就已经有了,中就已经有了, 但是考虑到兼容性并没有太多的使用它。但是考虑到兼容性并没有太多的使用它。 22 #pragma #pragma 预处理指令详解预处理指令详解

18、l 3.4 hdrstop3.4 hdrstop 表示预编译头文件到此为止,后面的头文件不进行表示预编译头文件到此为止,后面的头文件不进行 预编译。预编译。BCBBCB可以预编译头文件以加快链接的速度,但如可以预编译头文件以加快链接的速度,但如 果所有头文件都进行预编译又可能占太多磁盘空间,所果所有头文件都进行预编译又可能占太多磁盘空间,所 以使用这个选项排除一些头文件。有时单元之间有依赖以使用这个选项排除一些头文件。有时单元之间有依赖 关系,比如单元关系,比如单元 A A 依赖单元依赖单元 B B,所以单元,所以单元 B B 要先于单要先于单 元元 A A 编译。编译。 可以用可以用#pra

19、gma startup #pragma startup 指定编译优先级,如果使指定编译优先级,如果使 用了用了#pragma package(smart_init)#pragma package(smart_init),BCBBCB就会根据优先就会根据优先 级的大小先后编译。级的大小先后编译。 23 #pragma #pragma 预处理指令详解预处理指令详解 l 3.5 resource 3.5 resource * *.dfm.dfm 表示把表示把* *.dfm.dfm文件中的资源加入工程。文件中的资源加入工程。* *.dfm.dfm中包括窗中包括窗 体外观的定义。体外观的定义。 l 3.

20、6 warning( disable: 4507 34; once: 4385; 3.6 warning( disable: 4507 34; once: 4385; error: 164 )error: 164 ) 不显示不显示45074507和和3434号警告信息号警告信息 ,43854385号警告信息仅报号警告信息仅报 告一次,把告一次,把164164号警告信息作为一个错误。号警告信息作为一个错误。 pragma warning pragma warning 支持的其它下格式:支持的其它下格式: 24 #pragma #pragma 预处理指令详解预处理指令详解 #pragma warn

21、ing( push )#pragma warning( push )保存所有警告信息的现保存所有警告信息的现 有的警告状态。有的警告状态。 #pragma warning( push, n )#pragma warning( push, n )保存所有警告信息的保存所有警告信息的 现有的警告状态,并且把全局警告等级设定为现有的警告状态,并且把全局警告等级设定为n(1-4)n(1-4)。 #pragma warning( pop )#pragma warning( pop )从栈中弹出最后一个警告从栈中弹出最后一个警告 信息,在入栈和出栈之间所作的一切改动取消。信息,在入栈和出栈之间所作的一切改

22、动取消。 25 #pragma #pragma 预处理指令详解预处理指令详解 l 3.7 comment(.) 3.7 comment(.) 该指令将一个注释记录放入一个对象文件或可执行文该指令将一个注释记录放入一个对象文件或可执行文 件中。件中。 常用的常用的liblib关键字,可以帮我们连入一个库文件。如:关键字,可以帮我们连入一个库文件。如: #pragma comment(lib, comctl32.lib)#pragma comment(lib, comctl32.lib) #pragma comment(lib, vfw32.lib) #pragma comment(lib, vf

23、w32.lib) #pragma comment(lib, wsock32.lib) #pragma comment(lib, wsock32.lib) 26 #pragma #pragma 预处理指令详解预处理指令详解 l 3.8 #pragma loop_opt(on|off)3.8 #pragma loop_opt(on|off) 激活循环激活循环| |终止循环优化功能。终止循环优化功能。 l 3.9 #pragma warn +100 |-1003.9 #pragma warn +100 |-100 启用或者禁止:启用或者禁止:“变量已定义但未使用的变量已定义但未使用的”警告信息。警告

24、信息。 27 #pragma #pragma 预处理指令详解预处理指令详解 28 #pragma #pragma 预处理指令详解预处理指令详解 内存对齐问题内存对齐问题 计算机系统对基本类型数据在内存中存放的位置有计算机系统对基本类型数据在内存中存放的位置有 限制,要求这些数据的首地址的值是某个数限制,要求这些数据的首地址的值是某个数 k(k(通常它为通常它为 4 4或或8)8)的倍数,这就是内存对齐,而这个的倍数,这就是内存对齐,而这个 k k 则被称为该则被称为该 数据类型的对齐模数数据类型的对齐模数(alignment modulus)(alignment modulus)。 Win32

25、Win32平台下的微软平台下的微软 C C 编译器编译器(cl.exe for 80 x86)(cl.exe for 80 x86) 在默认情况下采用如下的对齐规则在默认情况下采用如下的对齐规则: : 任何基本数据类型任何基本数据类型 T T 的对齐模数就是的对齐模数就是T T的大小,即的大小,即 sizeof(T)sizeof(T)。比如对于。比如对于doubledouble类型类型(8(8字节字节) ),就要求该类,就要求该类 型数据的地址总是型数据的地址总是8 8的倍数。的倍数。 29 #pragma #pragma 预处理指令详解预处理指令详解 LinuxLinux下的下的GCCGCC

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

27、准规定结构体类型的对齐要求不能比它所 有字段中要求最严格的那个宽松,可以更严格。有字段中要求最严格的那个宽松,可以更严格。 30 #pragma #pragma 预处理指令详解预处理指令详解 如何使用如何使用c/c+c/c+中的对齐选项中的对齐选项 vc6vc6中的编译选项有中的编译选项有 /Zp1|2|4|8|16 /Zp1|2|4|8|16 ,/Zp1/Zp1表示表示 以以1 1字节边界对齐,相应的,字节边界对齐,相应的,/Zpn/Zpn表示以表示以n n字节边界对齐字节边界对齐 n n字节边界对齐的意思是说,一个成员的地址必须安字节边界对齐的意思是说,一个成员的地址必须安 排在成员的尺寸

28、的整数倍地址上或者是排在成员的尺寸的整数倍地址上或者是n n的整数倍地址上的整数倍地址上 ,取它们中的最小值。,取它们中的最小值。 也就是:也就是: min (sizeof( member),n)min (sizeof( member),n) 31 #pragma #pragma 预处理指令详解预处理指令详解 l 3.10 #pragma pack( n )3.10 #pragma pack( n ),(n:1,2,4,8,16)(n:1,2,4,8,16) 指定结构和联合成员的紧凑对齐。而一个完整的转指定结构和联合成员的紧凑对齐。而一个完整的转 换单元的结构和联合的紧凑对齐由换单元的结构和联

29、合的紧凑对齐由/Zp /Zp 选项设置。紧凑选项设置。紧凑 对齐用对齐用packpack编译指示在数据说明层设置。该编译指示在编译指示在数据说明层设置。该编译指示在 其出现后的第一个结构或联合说明处生效。其出现后的第一个结构或联合说明处生效。 该编译指示对定义无效。该编译指示对定义无效。 第一个结构成员之后的每个结构成员都被存储在更第一个结构成员之后的每个结构成员都被存储在更 小的成员类型或小的成员类型或 n n 字节界限内。字节界限内。 如果你使用无参量的如果你使用无参量的#pragma pack, #pragma pack, 结构成员被紧结构成员被紧 凑为以凑为以/Zp /Zp 指定的值。该缺省指定的值。该缺省/Zp /Zp 紧凑值为紧凑值为 /Zp8 /Zp8 。 32 #pragma #pragma 预处理指令详解预处理指令详解 l 3.113.11 #pragma pack( push|pop ,identifier, #pragma pack( push|pop ,identifier, n)n) 若不同的组件使用若不同的组件使用packpack编译指示指定不同的紧凑对编译指示指定不同的紧凑对 齐齐, , 这个语法允许你把程序组件组合为一个单独的转换这个语法允许你把程序组件组合为一个单独的转换 单元。单元。 带带pushpush参量的参量的pack

温馨提示

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

评论

0/150

提交评论