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

下载本文档

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

文档简介

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

2、共元素。,窗体文件 (.dfm) 用于记录窗体及窗体上控件的基本信息,资源文件 (.res) 保存图标、位图等信息,工程代码文件 (*.cpp) 新建工程时由系统自动创建,头文件(*.h),类定义文件,5,1.3.1 工程描述文件 工程描述文件的作用:用于描述宏定义,编译选项, 连接选项,文件清单等。结构如下: . ,C+Builder工程的基本结构,C+Builder工程的基本结构, . . ,6,7,1.3.2 工程代码文件 整个工程的总入口,用于初始化工程,创建窗体, 启动工程。示例代码如下: #include #pragma hdrstop USEFORM(Unit1.cpp, For

3、m1); WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) ,C+Builder工程的基本结构,C+Builder工程的基本结构,try Application-Initialize(); Application-CreateForm(_classid(TForm1), ,8,C+Builder工程的基本结构,catch (.) try throw Exception(); catch (Exception ,9,10,1.3.3 单元文件 (.cpp) 为窗体类的实现文件,其中有窗体的构造方法,和窗 体上各个控件的事件响应方法。代码如下: #i

4、nclude #pragma hdrstop #include Unit1.h #include Stdio.h #include iostream.h“ #pragma package(smart_init) #pragma resource *.dfm TForm1 *Form1;,C+Builder工程的基本结构,C+Builder工程的基本结构,_fastcall TForm1:TForm1(TComponent* Owner) : TForm(Owner) void _fastcall TForm1:Button1Click(TObject *Sender) ,11,12,1.3.4

5、 窗体文件(.dfm) 窗体文件用于定义窗体,及窗体上组件的属性。 1.查看窗体代码的操作 在窗体上单击鼠标右键,在弹出菜单中选择 View as Text,即可看到窗体文件的内容。 2.从窗体代码窗口返回窗体窗口的操作 在窗体代码窗口上单击鼠标右键,在弹出菜单中选 择 View as Form。,C+Builder工程的基本结构,13,object Form1: TForm1 Left = 234 Top = 124 Width = 696 Height = 480 object Button1: TButton Left = 32 Top = 400 OnClick = Button1Cl

6、ick end end,C+Builder工程的基本结构,14,1.3.6 头文件(*.h) 头文件用来声明类。代码示例如下: #ifndef Unit1H #define Unit1H #include #include #include #include #include ,C+Builder工程的基本结构,class TForm1 : public TForm _published:/ IDE-managed Components TButton *Button1; TLabel *Label1; TMainMenu *MainMenu1; private:/ User declarat

7、ions public:/ User declarations _fastcall TForm1(TComponent* Owner); ; extern PACKAGE TForm1 *Form1; #endif,15,二、工程需要保存的文件 *.bpr *.cpp *.dfm *.res *.h 小练习: 新建一个项目,编译运行,关闭项目,然后到项目 文件夹下,删除上述文件类型之外的文件,然后打开项 目,看看能否从新编译运行。,16,C+Builder工程的基本结构,#pragma 预处理指令详解,一、主要功能 对每个编译器给出了一方法,在保持与C和C+语言完 全兼容的情况下,给出主机或操

8、作系统专有的特征。 编译指示是机器或操作系统专有的,且对于每个编译 器都是不同的。 二、命令格式 #pragma para 其中:para为命令参数。,17,#pragma 预处理指令详解,三、常见参数和意义 3.1 message 在编译信息输出窗口中输出相应的信息,这对于源代 码信息的控制是非常重要的。其使用方法为: #pragma message(消息文本) 当编译器遇到这条指令时就在编译输出窗口中将消 息文本打印出来。 如果在程序中定义了许多宏,用于控制源代码版本 ,则有可能会忘记有没有正确的设置这些宏,此时可以 用这条指令在编译的时候就进行检查。,18,#pragma 预处理指令详解

9、,假设希望判断有没有在源代码的什么地方定义了_X86这 个宏,可以用下面的方法: #ifdef _X86 #pragma message(_X86 macro activated!) #endif 定义了_X86这个宏以后,应用程序在编译时就会在 编译输出窗口里显示_86 macro activated!。就会 知道有没有定义一些特定的宏了。,19,#pragma 预处理指令详解,3.2code_seg 格式: #pragma code_seg( section-name , section-class ) 它能够设置程序中函数代码存放的代码段,当开发驱 动程序的时候就会使用到它。,20,#p

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

11、 package(smart_init),BCB就会根据优先 级的大小先后编译。,22,#pragma 预处理指令详解,3.5 resource *.dfm 表示把*.dfm文件中的资源加入工程。*.dfm中包括窗 体外观的定义。 3.6 warning( disable: 4507 34; once: 4385; error: 164 ) 不显示4507和34号警告信息 ,4385号警告信息仅报 告一次,把164号警告信息作为一个错误。 pragma warning 支持的其它下格式:,23,#pragma 预处理指令详解,#pragma warning( push )保存所有警告信息的现

12、有的警告状态。 #pragma warning( push, n )保存所有警告信息的 现有的警告状态,并且把全局警告等级设定为n(1-4)。 #pragma warning( pop )从栈中弹出最后一个警告 信息,在入栈和出栈之间所作的一切改动取消。,24,#pragma 预处理指令详解,3.7 comment(.) 该指令将一个注释记录放入一个对象文件或可执行文 件中。 常用的lib关键字,可以帮我们连入一个库文件。如: #pragma comment(lib, comctl32.lib) #pragma comment(lib, vfw32.lib) #pragma comment(l

13、ib, wsock32.lib),25,#pragma 预处理指令详解,3.8 #pragma loop_opt(on|off) 激活循环|终止循环优化功能。 3.9 #pragma warn +100 |-100 启用或者禁止:“变量已定义但未使用的”警告信息。,26,#pragma 预处理指令详解,27,#pragma 预处理指令详解,内存对齐问题 计算机系统对基本类型数据在内存中存放的位置有 限制,要求这些数据的首地址的值是某个数 k(通常它为 4或8)的倍数,这就是内存对齐,而这个 k 则被称为该 数据类型的对齐模数(alignment modulus)。 Win32平台下的微软 C

14、编译器(cl.exe for 80 x86) 在默认情况下采用如下的对齐规则: 任何基本数据类型 T 的对齐模数就是T的大小,即 sizeof(T)。比如对于double类型(8字节),就要求该类 型数据的地址总是8的倍数。,28,#pragma 预处理指令详解,Linux下的GCC的规则是:任何2字节大小的数据类 的对齐模数是2,而其它所有超过2字节的数据类型都以4 为对齐模数。 ANSI C规定一种结构类型的大小是它所有字段的大 小以及字段之间或字段尾部的填充区大小之和。 填充区就是为了使结构体字段满足内存对齐要求而 额外分配给结构体的空间。 ANSI C标准规定结构体类型的对齐要求不能比

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

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

17、参量的pack编译指示的每次出现将当前的紧 凑对齐存储到一个内部编译器堆栈中。 编译指示的参量表从左到右读取。如果你使用push, 则当前紧凑值被存储起来; 值是一样的。,32,#pragma 预处理指令详解,如果你给出一个n 的值, 该值将成为新的紧凑值。若指 定一个标识符, 即你选定一个名称, 则该标识符将和这 个新的的紧凑值联系起来。 带一个pop参量的pack编译指示的每次出现都会检索 内部编译器堆栈顶的值,并且使该值为新的紧凑对齐值。 如果使用pop参量且内部编译器堆栈是空的,则紧凑值为 命令行给定的值, 并且将产生一个警告信息。,33,#pragma 预处理指令详解,若使用pop且指定一个n的值, 该值将成为新的紧凑 值。若你使用pop 且指定一个标识符, 所有存储在堆栈 中的值将从栈中删除, 直到找到一个匹配的标识符, 这 个与标识符相关的紧凑值也从栈中移出, 并且这个仅

温馨提示

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

评论

0/150

提交评论