MFC调试技术
MFC与比例阀校准
![MFC与比例阀校准](https://img.taocdn.com/s3/m/342e142fcfc789eb172dc831.png)
质量流量控制器质量流量控制器(MFC) 检查和校准1次/月。
1) 进入手动窗口(Manual)抽气至600mbar.2) Select G from the V/G (Pressure Mode) box, select Outlet from the In/ Outlet (Flow Control) box, and set the Inlet % to 20 and the Pressur Setpoint to 600. V2 and V3 must be on (green).3) The measured feedback from the MFC should quickly settle within ± 1of the setpoint (19 – 21%).4) If the feedback is not correct, make sure the argon pressure is between 1. and 2.5 mbar, then follow the mechanical zero procedure for the control val ve in the manufacturer’s manual. If the reading is still incorrect, the MFC must be replaced or sent out for calibration.比例阀检查操作比例阀检查操作1次/月1) Set up the MFC flow per steps a) and b) in Mass Flow Controller and observe the Signal Out in the Gas Out box on the Overview screen. It should be cycling around 50 to 60% and the pressure should be controlled around 600 ± 1 mbar.2) Change the Inlet % to 30 and wait for the pressure to settle (~ two min utes). Make sure that the Signal Out is now cycling around ahigher % and the pressure is again controlled around 600 ± 1 mbar.3) Adjust the Inlet % to 10 and wait another two minutes for the pressure to settle. The Signal Out should be lower than in step a) and again, the pressure should be controlled around 600 ± 1 mbar.4) If the Herion valve does not follow this pattern and control the pressure, check that the Outlet PID values are correct. If all the control parameters are normal, try cleaning the valve as described in Chapter 2, DSS Main- tenance and if this does not improve the control; replace the body of the valve and/or the amplifier.比例阀清洁1次/季度Refer to Chapter 2, DSS Maintenance for details.。
MFC使用教程范文
![MFC使用教程范文](https://img.taocdn.com/s3/m/1091355f58eef8c75fbfc77da26925c52dc59167.png)
MFC使用教程范文MFC(Microsoft Foundation Classes)是微软公司为Windows操作系统开发的一套面向对象的应用程序框架,用于简化Windows应用程序的开发过程。
MFC提供了一系列的类和函数,开发者可以利用这些类和函数来创建、管理和控制Windows应用程序。
本文将为您介绍MFC的基本使用方法和步骤。
一、MFC的基本概念和组成MFC是建立在Windows API之上的一层封装,它提供了一系列的类和函数,开发者可以利用这些封装好的类和函数来开发Windows应用程序。
MFC的组成包括:应用程序类、窗口类、对话框类和视图类。
1.应用程序类:MFC的应用程序类是整个应用程序的入口点,它包含了应用程序的初始化和销毁过程,以及主消息循环。
2.窗口类:窗口类用于创建和管理应用程序中的窗口,包括主窗口、子窗口和对话框等。
3.对话框类:对话框类用于创建和管理应用程序中的对话框,对话框是一种特殊的窗口,用于和用户进行交互。
4.视图类:视图类用于创建和管理应用程序中的视图,视图是应用程序中显示数据的区域。
二、MFC应用程序的创建步骤下面将介绍MFC应用程序的创建步骤。
1. 打开Visual Studio IDE,并选择"创建新项目"。
2.在"创建新项目"对话框中,选择"C++"->"MFC",点击"下一步"。
3.在"应用程序信息"对话框中,填写应用程序的名称和位置等信息,点击"完成"。
4. Visual Studio将自动创建一个MFC应用程序模板,并打开主窗口的代码和界面文件。
5.在主窗口的代码文件中,可以编写处理消息和事件的代码。
6.在主窗口的界面文件中,可以通过拖拽控件来设计应用程序的界面。
7.编译并运行应用程序,查看效果。
三、MFC应用程序的消息处理MFC应用程序中的消息处理是通过重载消息处理函数来实现的。
MFC技术知识
![MFC技术知识](https://img.taocdn.com/s3/m/e5ad45ed05a1b0717fd5360cba1aa81144318f05.png)
MFC技术知识1. 什么是质量流量计?什么是质量流量控制器?质量流量计,即Mass Flow Meter (缩写为MFM ), 是⼀种精确测量⽓体流量的仪表,其测量值不因温度或压⼒的波动⽽失准,不需要温度压⼒补偿。
质量流量控制器, 即Mass Flow Controller (缩写为MFC ), 不但具有质量流量计的功能,更重要的是,它能⾃动控制⽓体流量,即⽤户可根据需要进⾏流量设定,MFC ⾃动地将流量恒定在设定值上,即使系统压⼒有波动或环境温度有变化,也不会使其偏离设定值。
简单地说,质量流量控制器就是⼀个稳流装置, 是⼀个可以⼿动设定或与计算机联接⾃动控制的⽓体稳流装置。
2. 质量流量控制器的原理是什么?质量流量控制器由流量传感器、分流器通道、流量调节阀门和放⼤控制器等部分组成。
质量流量控制器的剖⾯结构图见图1。
⽓体流量传感器采⽤⽑细管传热温差量热法原理测量⽓体的质量流量(⽆需温度压⼒补偿)。
将传感器加热电桥测得的流量信号送⼊放⼤器放⼤, 放⼤后的流量检测电压与设定电压进⾏⽐较, 再将差值信号放⼤后去控制调节阀门,闭环控制流过通道的流量使之与设定的流量相等。
分流器决定主通道的流量。
与质量流量控制器配套的流量显⽰仪上设置有稳压电源,数字电压表, 设定电位器, 外设、内设转换和三位阀控开关等。
⽓体质量流量控制器与流量显⽰仪连接后的⼯作原理如图2所⽰。
图1. 质量流量控制器结构图图2. 质量流量控制器原理图3. 怎么理解质量流量计/质量流量控制器的流量单位?⽓体质量流量单位⼀般以sccm (Standard Cubic Centimeter per Minute,每分钟标准毫升)和slm (Standard Liter per Minute,每分钟标准升)来表⽰。
这意味着,这种仪表在不同的使⽤条件下,指⽰的流量均是标准状态下的流量。
标准状态规定为: ⽓压—101325Pa (760mm Hg); 温度—0℃ (273.15K)。
备自投装置调试报告
![备自投装置调试报告](https://img.taocdn.com/s3/m/19387c36a31614791711cc7931b765ce05087a7b.png)
备自投装置调试报告.MFC2031-1型备自投装置调试报告装置型号安装位置外观状况试验日期检验项目:1、装置的外部检查。
检查回路是否符合装置设计要求,检查外部接线是否正确。
检查结论:正确2、通电检查送上直流电源,通电后装置开始进行自检,检查装置自检结果是否正确,检查装置显示是否正确。
检查结果:正确3备用开关自投试验3.1定值整定:按定值单整定U1%母线电压残压(0----60%),U2%母线失压整定值(10%---80%),U3%备用无压检定值(20%---100%),T1失压起动延时(20---5000ms)。
3.2充电条件检查:当以下条件满足时,约10秒后备自投自动进入就绪状态:1DL合,1ZKK合,2ZKK分,1PT电压正常,2PT电压正常。
检查结果:正确3.3动作过程检查:✓1DL跳闸,备自投起动,先联跳1ZKK,确认其跳开后,合2DL和2ZKK。
✓1ZKK跳闸,备自投起动,合2DL和2ZKK。
✓380V母线三相失压,电压低于整定值U2达整定延时时间T1后,备自投起动,先跳1ZKK,确认其跳开后再合2DL和2ZKK。
检查结果:正确3.4闭锁条件检查✓刚完成一次自投动作后。
信号:“备投动作”、“备投闭锁”。
✓1DL、1ZKK和2DL、2ZKK均合上或均打开时,备自投无法进行自投。
信号:“备投闭锁”、“开位异常”。
✓备用无压,即2PT电压低于整定值U3时,将不进行自投。
信号“备投闭锁”、“备用无压”。
该功能可根据需要进行投退。
✓备自投起动后,在发出跳1ZKK命令约0.6s后,若1ZKK辅助接点信号未返回,装置将认为1ZKK拒动,为防止备用电源投入故障而不再发合2ZKK和2DL的命令。
信号:“备投闭锁”、“开位异常”。
.MFC2031-1型380VⅠ段良好2010.8.17装置名称备用电源自投装置生产厂家阿城继电器厂环境温度27℃.试验负责人试验人员MFC2031-1型备自投装置调试报告装置型号安装位置外观状况试验日期检验项目:✓装置检测到1PT之1相或2相断线后,将自行闭锁自投。
MFC5103调试说明
![MFC5103调试说明](https://img.taocdn.com/s3/m/00cd4756ad02de80d4d84088.png)
MFC5103装置现场调试指南V0.11.定值参数设定1.1.整定定值说明序号. 名称单位范围缺省值1.并联切换压差%0~20 202.并联切换频差Hz 0.02~0.50 0.503.并联切换相差度0.5~20.0 15.04.并联跳闸延时s 0.06~5.00 0.505.单母备用高低合闸延时ms 0~120 06.单母1→2同时切换延时ms 1~500 507.单母2→1同时切换延时ms 1~500 508.分段1→3同时切换延时ms 1~500 509.分段2→3同时切换延时ms 1~500 5010.分段3→1同时切换延时ms 1~500 5011.分段3→2同时切换延时ms 1~500 5012.快速切换频差Hz 0.1~3.0 1.513.快速切换相差度0.5~60.0 30.014.越前允许角度-60~-20 -4515.开关1合闸时间ms 5~150 见说明16.开关2合闸时间ms 5~150 见说明17.开关3合闸时间ms 5~150 见说明18.残压切换电压幅值% 20~60 2519.长延时整定值s 0.5~10.0 9.020.失压起动电压幅值% 20~90 参考现场备自投整定数值21.失压起动延时s 0.10~5.00 参考现场备自投整定数值22.无流检查定值 A 0.02~2.00 见说明23.无流起动频差Hz 0.02~0.50 见说明24.无流起动电流定值1 A 0.02~2.00 见说明25.无流起动电流定值2 A 0.02~2.00 见说明26.无流起动延时ms 10~1000 见说明27.逆功率起动延时ms 20~1000 10028.有压定值% 70~100 7529.方向过流闭锁定值 A 0.10~20.00 见说明序号. 名称单位 范围 缺省值 30. 切辅机一段电压幅值 % 20~80 60 31. 切辅机二段电压幅值 % 20~80 60 32. 切辅机一段延时 s 0.0~20.0 0.5 33. 切辅机二段延时 s 0.0~20.0 9.0 34. 初始相角差1 度 -120~120 0 35. 初始相角差2 度 -120~120 0 36. 出口保持时间 ms 100~5000 500 37.后备失电延时ms200~500300✧ 快速切换频差、快速切换相差:如果实现方式为快速切换,则当待合开关两侧的频差和相差小于快速切换频差、快速切换相差,装置发合闸命令。
MFC基础教程
![MFC基础教程](https://img.taocdn.com/s3/m/c8973d9177a20029bd64783e0912a21614797f08.png)
MFC基础教程MFC(Microsoft Foundation Classes)是微软公司开发的一组C++类库,用于开发Windows平台的应用程序。
MFC提供了许多用于创建图形用户界面和处理用户输入的类和函数,使开发者能够更轻松地构建Windows应用程序。
对于初学者来说,学习MFC可以帮助他们快速入门Windows编程,并且能够开发出功能丰富的应用程序。
本教程将向初学者介绍MFC的基础知识和使用方法。
1.MFC的概述MFC是构建Windows应用程序的一种开发方式。
它提供了大量的类和函数,包括窗口、对话框、控件、消息处理等,用于简化开发者创建和操作Windows界面的过程。
2.开发环境准备在开始学习MFC之前,需要安装Visual Studio等集成开发环境。
Visual Studio是一个开发Windows应用程序的强大工具,它包含了MFC 类库和丰富的开发工具。
3.创建MFC应用程序在Visual Studio中,可以选择创建一个MFC应用程序项目。
在创建项目的过程中,可以选择使用对话框、单文档或多文档应用程序。
4.MFC应用程序的结构MFC应用程序通常由一个或多个窗口或对话框组成。
窗口是应用程序的主要界面,可以包含菜单、工具栏、状态栏等。
对话框用于收集用户输入或显示特定信息。
5.消息映射和消息处理MFC应用程序通过消息系统与用户交互。
当用户执行一些操作(例如点击按钮、按下键盘)时,应用程序会接收到相应的消息。
通过消息映射和消息处理函数,可以定义应用程序对不同消息的响应。
6.控件的使用7.对话框的使用8.文件操作MFC提供了丰富的文件操作功能,包括打开、保存、读取和写入文件等。
通过MFC类中的方法,可以轻松地进行文件操作,并处理异常情况。
9.资源管理10.调试和错误处理在开发应用程序时,调试和错误处理是非常重要的。
MFC提供了丰富的调试工具和机制,帮助开发者快速定位和修复错误。
通过使用断点、输出调试信息等方法,可以更好地调试应用程序。
mfc11
![mfc11](https://img.taocdn.com/s3/m/97f06629915f804d2b16c136.png)
DWORD cbSize,
DWORD fdwNewProtect,
PDWORD pfdwOldProtect);
该函数用来把已经分配的页改变成保护页。参数1指定分配页的基地址;参数2指定保护页的长度;参数3指定页的保护属性,取值PAGE_READ、PAGE_WRITE、PAGE_READWRITE等等;参数4用来返回原来的保护属性。
调试手段
MFC应用程序可以使用C运行库的调试手段,也可以使用MFC提供的调试手段。两种调试手段分别论述如下。
C运行库提供信息报告函数
用来报告应用程序的调试版本运行时的警告和出错信息。包括:
_CrtDbgReport 用来报告调试信息;
_CrtSetReportMode 设置是否警告、出错或者断言信息;
_CrtSetReportFile 设置是否把调试信息写入到一个文件。
条件验证或者断言宏:
断言宏主要有:
assert 检验某个条件是否满足,不满足终止程序执行。
	traceOle = 16, // special OLE callback trace
	traceDatabase = 32, // special database trace
	traceInternet = 64 // special Internet client trace
类的operator new操作符是类的静态成员函数,对该类的对象来说将覆盖全局的operator new。全局的operator
new用来给内部类型对象(如int)、没有定义operator new操作符的类的对象分配内存。
MFC教程
![MFC教程](https://img.taocdn.com/s3/m/19fb5029dd36a32d73758148.png)
01章用向导创建文档窗口MFC教程是小雅最怕写的内容,除了水平问题之外,还有一点就是,MFC将许多程序封装起来,使众多程序员在编程时,即使编出了程序,也不知究竟为什么这样就可以了。
这一现象使小雅想到当今的Java程序员,许多人在开发外包项目时,因为整个FrameWork已经建成,自己只是担当其中一部分功能,出了BUG之后,找原因非常困难。
在SDK教程中,小雅将各种功能进行详细解说,而MFC教程中,只是用例子来讲解MFC的原理,学会原理之后,就会感到MFC比SDK编程省了许多事。
小雅在SDK教程中,为了讲明API功能,用的方法都是C语言的方法,而MFC用的全是C++的内容,因此,学习MFC必须对C++有较深的了解,不会C语言、C++语言而能够学会MFC的人只能是吹牛。
小雅的“C语言教程”和“C++语言教程”都是按照标准C/C++来写的,在Unix、Linux、Windows都适用,这是很重要的基础。
SDK教程主要是让初学者明白WindowsAPI的功能,以及程序的实现方法,基本上是“C语言+ API”,而MFC基本上是“C++ + API”。
SDK编程和MFC是可以相互转化,相互调用的,因为MFC 封装了绝大部分API,但不是所有的API函数。
注意:SDK并不是只能用C语言来写,用C++一样编程,小雅在作教程时为了把内容说清楚,同时兼顾不会C++的人员才使用C语言。
对于初学者,小雅建议在C/C++的基础上用MFC来编程,一是省去了很多编程,二是用上了C++的面向对象编程的思想。
当今要找一个C++的项目来一边做一边学是很困难的。
小雅自己也一直想找一个C++的工作而未能如愿。
通过学习MFC 再反过来加强一下学的不是很深的C++,不是很好的一个方法吗?不过,MFC和SDK与C/C++不同点在消息事件处理方面,初学者要学会这一内容。
关于“”有“托管”和“非托管”二种编程方式,小雅的SDK教程和MFC教程全部是“非托管”编程,也就是传统编程。
MFC软件开发自适应屏幕分辨率方法研究
![MFC软件开发自适应屏幕分辨率方法研究](https://img.taocdn.com/s3/m/8cb3ecaff9c75fbfc77da26925c52cc58bd690a0.png)
MFC软件开发自适应屏幕分辨率方法研究摘要:为满足某些场景下多元化的界面设计需求,需要对MFC软件界面进行优化,并且实现屏幕分辨率的自适应。
文章从控件的自绘和布局着手,研究MFC应用程序界面的优化方案,在不利用第三方插件的基础上,利用C++/MFC自带的功能,继承MFC类并定义或重写相关函数,实现了应用程序在不同分辨率屏幕下的自适应布局,以及适应软件运行时的屏幕分辨率调整,设计了不同于传统Windows应用程序风格的软件界面,为MFC程序开发和界面优化提供参考。
关键词:C++/MFC界面优化分辨率自适应一、概述MFC(Microsoft Foundation Classes,微软基础类库)是基于C++程序设计语言的应用程序框架和引擎,以C++类的形式封装了Windows的API [1]。
随着编程语言的发展和迭代,MFC逐渐被淘汰,并不再更新和修复,主要原因是入门门槛相对其他语言要高,对于同样完成一个任务代码量相对较多,且不能实现跨平台。
MFC具有的优势是浅封装,由于直接调用底层API函数,运行速度快,并且在开发其他领域的程序或使用第三方软件时,如工业控制类的程序,由于底层的程序都是用C/C++语言编写,使程序员能够更快的掌握该领域的编程技术[2-6]。
此外,由于封装了丰富的WinApi函数,可快速、便捷的进行调用,因此在Windows操作系统下进行软件开发,MFC仍具有较大的优势。
MFC预留了控件的重绘窗口,以满足用户对界面风格的修改需求。
一般地,可对控件和界面的颜色、字体进行修改,也可进行贴图,达到优化的目的。
文章主要以布局自适应、列表和按钮的派生类和方法重写为例,实现界面的简单优化,主要研究以下内容:自适应屏幕分辨率:在不同分辨率的屏幕中运行程序时,保持界面相对布局不变,各控件相对位置按设计的比例进行重新分布;在程序运行过程中,修改屏幕分辨率时,自适应界面和控件。
应用程序的尺寸调节和滚动:程序可调节界面尺寸,根据调节范围,设计滚动条,并响应滚动条事件。
VC6.0MFC串口调试助手编辑过程介绍
![VC6.0MFC串口调试助手编辑过程介绍](https://img.taocdn.com/s3/m/66e9cf4b2e3f5727a5e962e2.png)
其于MFC的串口调试助手编辑过程一、新建打开VC6.0 文件新建工程MFC AppWiard(exe) 位置(选择保存工程位置)工程名称(输入工程名XXXX)确定选择基本对话框下一步下一步下一步选择(CXXXXDlg)完成确定在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消”及提示框)删除或修改使用,至此基本框架完成如下图:二、往生成的基本框架中添加控件1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再将控件添加到基本框内使用,步骤如下:菜单栏工程添加到工程Components and controls…Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0”Insert 确定OK 关闭此子窗口完成添加操作标志如上图所示。
2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:此控件(标志)是下面步骤添加进来的串口控件基本框架3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如下图所示:选择其中任意一个作为输入编辑框及输出编辑框这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示,上图是运行后的效果。
4、对以上四个控件编程步骤如下:a、右击串口通信控件建立类向导Member variables Control IDS中选择IDC_MSCOMM1 add variable…Member variable name中输入控件变量名m_ctrlComm(变量名可以随意选取,但程序中应与所取变量名一致)OK 确定b、右击编辑框、属性、常规、ID:中输入ID号,此编辑框用于接收显示数据的其ID 号为IDC_EDIT_RXDATA(可以随意选取,但程序中应与所取ID号一致),再在此窗口的样式中勾选”多行”,同时将“自动水平滚动(T)”勾选去掉,再勾选“垂直滚动(V)”,此勾选操作是用于垂直多行显示的,按回车后即可输入;同理右击另一编辑框输入ID号为IDC_EDIT_TXDATA此编辑框用于编辑发送数据的,同样也选上用于垂直多行显示,发送框可以不用垂直多行显示;再为按钮控件添加ID号,为IDC_BUTTON_MANUALSEND,并将标题中的“Button1”改为“发送”,功能是按一次就把发送编辑框中的内容发送一次。
VS2012创建MFC动态库以及动态库调试详细步骤
![VS2012创建MFC动态库以及动态库调试详细步骤](https://img.taocdn.com/s3/m/0512244b3b3567ec102d8a75.png)
将刚才的DLL项目生成解决方案;
打开Debug文件夹,找到DLL文件以及lib文件,将它拷贝到对话框项目的Debug中;
这里的对话框项目名为dDllTest;
在Dll工程中找到要用的那个头文件
也拷贝到对话框工程中;
在对话框项目中找到stdafx.h文件,在里面包含头文件,链接LIB
编译完成;
VS2012创建MFC动态库以及动态库调试详细步骤
技术交流:2210518824(qq)
1.新建一个DLL工程
打开VS2012,点击新建项目出现新建项目对话框,如下图所示;
选择MFCMFCDLL;键入项目名称以及解决方案名称,可以不一样,选择存放位置,点击确定;进入MFC DLL向导,点击下一步;
选择使用共享MFC DLL的规则DLL点击完成;
这时候就生成了一个空的MFC DLL工程;
2.添加用户程序
点击解决方案资源管理器;
右击头文件,添加--->新建项
进入添加新项界面,选择头文件,输入头文件名,点击添加
同样的方法在添加一个源文件;
.CPP文件:
.H文件
一个简单的实现加法的MFC DLL完成;
3.调用和调试DLL
创建一个基于对话框的MFC项目用于测试DLL;
选择MFCLibrary1右击打开属性界面;在配置属性->常规中将输出目录和中间目录改成如下图所示;
在连接器—>常规中将输出文件修改,如下图所示
右击对话框工程,点击项目依赖项
选择DLL
在对话框项目中找到stdafx.h文件,在里面包含头文件,链接LIB
完成,编译,直接调用,调用方法和方法一一样,可以直接进入函数调试
两种方法的优缺点
mfc面试知识点总结
![mfc面试知识点总结](https://img.taocdn.com/s3/m/a59bcdde6aec0975f46527d3240c844768eaa074.png)
mfc面试知识点总结MFC(Microsoft Foundation Class)是微软公司开发的一套 C++ 库,用于简化 Windows 应用程序的开发。
MFC 提供了一系列的类和函数,用于处理 windows 窗口、消息、事件等,使得开发者能够更快速地完成 Windows 程序的开发。
在 MFC 的面试中,通常会涉及到一些基础知识和高级知识,下面就来总结一些常见的 MFC 面试知识点。
一、MFC 的基本概念1. MFC 是什么?MFC 是 Microsoft Foundation Class 的简称,是微软公司提供的用于简化 Windows 应用程序的开发的一套 C++ 类库。
2. MFC 的特点有哪些?MFC 的特点包括易学易用、功能强大、提供了丰富的类库和工具等。
3. MFC 和 Win32 API 有什么区别?MFC 是建立在 Win32 API 之上的,它封装了 Win32 API,提供了更加高层次的接口,使得开发 Windows 应用程序更加简单和方便。
4. MFC 和 ATL 有什么区别?MFC 是面向传统 Windows 应用程序的开发框架,而 ATL 是为开发高效的 COM 组件而设计的,两者目标不同。
5. MFC 和 .Net 的关系是什么?MFC 是基于 C++ 的框架,而 .Net 是 Microsoft 开发的基于 .Net Framework 的框架,两者属于不同的技术栈。
二、MFC 的基本类和对象1. CWinApp 类CWinApp 是 MFC 应用程序的主类,它代表了一个 MFC 应用程序的实例,通常包含了一个主窗口类对象和一些初始化及清理代码。
2. CFrameWnd 类CFrameWnd 是 MFC 中的主窗口类,它代表了应用程序的主窗口,通常包含了菜单、工具栏等 UI 元素。
3. CView 类CView 是MFC 中的视图类,它用于显示窗口中的用户界面,通常包含了子视图、控件等。
备自投装置调试报告
![备自投装置调试报告](https://img.taocdn.com/s3/m/710de08b844769eae109ed63.png)
3.4闭锁条件检查
刚完成一次自投动作后。信号:“备投动作”、“备投闭锁”。
1DL、1ZKK和2DL、2ZKK均合上或均打开时,备自投无法进行自投。信号:“备投闭锁”、“开位异常”。
备用无压,即2PT电压低于整定值U3时,将不进行自投。信号“备投闭锁”、“备用无压”。该功能可根据需要进行投退。
交流伏安表 JD2-97G203 0.2级
试验负责人
试验人员
MFC2031-1型备自投装置调试报告
装置型号
MFC2031-1型
装置名称
备用电源自投装置
安装位置
380VⅢ段
生产厂家
阿城继电器厂
外观状况
良好
环境温度
27℃
试验日期
2010.8.17
页次
1/2
检验项目:
1、装置的外部检查。
检查回路是否符合装置设计要求,检查外部接线是否正确。
3.2充电条件检查:
当以下条件满足时,约10秒后备自投自动进入就绪状态:
1DL合,1ZKK合,2ZKK分,1PT电压正常,2PT电压正常。
检查结果:正确
3.3 动作过程检查:
1DL跳闸,备自投起动,先联跳1ZKK,确认其跳开后,合2DL和 2ZKK。
1ZKK跳闸,备自投起动,合2DL和2ZKK。
380V母线三相失压,电压低于整定值U2达整定延时时间T1后,备自投起动,先跳1ZKK,确认其跳开后再合2DL和2ZKK。
备自投起动后,在发出跳1ZKK命令约0.6s后,若1ZKK辅助接点信号未返回,装置将认为1ZKK拒动,为防止备用电源投入故障而不再发合2ZKK和2DL的命令。信号:“备投闭锁”、“开位异常”。
试验负责人
试验人员
MFC控件使用详细教程
![MFC控件使用详细教程](https://img.taocdn.com/s3/m/1367781f302b3169a45177232f60ddccda38e6a3.png)
MFC控件使用详细教程MFC(Microsoft Foundation Classes)是微软公司开发的一套面向对象的C++类库,旨在简化Windows应用程序的开发。
其中包括了一系列的控件类,用于构建Windows用户界面。
本文将介绍MFC控件的使用,并提供详细的教程。
1.创建MFC应用程序首先,打开Visual Studio开发环境,选择创建MFC应用程序项目。
在项目向导中,选择“对话框”应用程序类型。
2.添加控件到对话框在MFC应用程序中,用户界面的主要组成部分是对话框。
打开对话框资源文件(通常是一个名为“MainDlg”的文件),可以看到空白的对话框。
从工具箱中选择所需的控件,例如按钮(Button)、文本框(Edit Control)等。
点击工具箱中的控件,然后在对话框上绘制一个矩形,即可在对话框中添加该控件。
3.设置控件属性选中添加的控件,可以在“属性”窗口中设置其属性。
例如,可以设置按钮的文本、大小、位置等。
4.响应控件事件控件可以触发各种事件,例如按钮点击事件。
为了响应这些事件,我们需要添加相应的事件处理程序。
在资源视图中,右键点击对话框资源文件,选择“添加事件处理程序”。
然后,选择要响应的事件,例如按钮的点击事件。
在出现的对话框中,输入事件处理程序的名称,并选择成员变量的名称。
点击“确定”后,Visual Studio会自动生成事件处理程序的代码。
5.控件的常用操作- 设置控件的文本:使用SetWindowText函数,例如SetWindowText("Hello");- 获取控件的文本:使用GetWindowText函数,例如CString str; GetWindowText(str);- 启用或禁用控件:使用EnableWindow函数,例如EnableWindow(FALSE)可以禁用控件;- 显示或隐藏控件:使用ShowWindow函数,例如ShowWindow(SW_HIDE)可以隐藏控件;- 设置或获取控件的位置、大小:使用SetWindowPos和GetWindowRect函数,例如SetWindowPos(NULL, x, y, width, height)可以设置控件的位置和大小;- 样式和外观设置:使用ModifyStyle和SetWindowLong函数,例如在按钮上设置图标和文字风格。
MFC 打印调试信息
![MFC 打印调试信息](https://img.taocdn.com/s3/m/5b9434f304a1b0717fd5dd83.png)
在MFC,Win32程序中向控制台(Console)窗口输出调试信息
在MFC程序中输出调试信息的方法有两种,一种是使用TRACE宏,可以向Output窗口输出调试信息;另一种是用MessageBox,弹出消息框来输出调试信息,但会影响程序的运行。
其实有一种方法可以更为方便的输出调试信息,就是输出到控制台(Console)中,即不影响程序运行,又便于查看调试信息。
方法如下:
1、#include <conio.h>
2、在需要开启控制台窗口的地方调用
AllocConsole();//注意检查返回值
3、在需要输出调试的时候调用_cprintf等函数
如_cprintf("i=%d\n", i);
4、关闭控制台的时候调用
FreeConsole();
注意:上述方法在输出中文时会出现乱码,如果需要输出中文,请使用下面的方法:AllocConsole();
freopen( "CONOUT$","w",stdout);
printf("i的值为%d\n", i);
FreeConsole();。
MFC颜色调配 vc++6.0颜色设置,如何修改控件颜色
![MFC颜色调配 vc++6.0颜色设置,如何修改控件颜色](https://img.taocdn.com/s3/m/0ee3745daeaad1f346933fe6.png)
效果展示1.新建一个MyEdit类,该类继承自CEdit类,并添加相关变量和函数;在MyEdit类的头文件(.h)中定义如下变量和函数:private:COLORREF m_BackgroundColor;//背景颜色COLORREF m_TextColor;//文本颜色CBrush m_brushBk;//笔刷public:void SetBackgroundColor(COLORREF color);//设置背景颜色void SetTextColor(COLORREF color);//设置文本颜色COLORREF GetBackgroundColor() const;//获取背景颜色COLORREF GetTextColor() const;//获取文本颜色在MyEdit类的源文件(.cpp)中给变量赋初值,并书写函数体如下:MyEdit::MyEdit()//构造函数{m_BackgroundColor=RGB(0,0,0);m_TextColor=RGB(250,250,250);}MyEdit::~MyEdit()//析构函数{m_brushBk.DeleteObject();//释放笔刷}void MyEdit::SetBackgroundColor(COLORREF color)//设置背景颜色{m_BackgroundColor=color;}void MyEdit::SetTextColor(COLORREF color)//设置文本颜色{m_TextColor=color;}COLORREF MyEdit::GetBackgroundColor() const//获取背景颜色{return m_BackgroundColor;}COLORREF MyEdit::GetTextColor() const//获取文本颜色{return m_TextColor;}打开类向导,给MyEdit类添加=WM_CTLCOLOR消息反射在MyEdit类的源文件中的CtlColor()中添加如下代码:HBRUSH MyEdit::CtlColor(CDC* pDC, UINT nCtlColor){// TODO: Change any attributes of the DC herem_brushBk.DeleteObject();m_brushBk.CreateSolidBrush(m_BackgroundColor);pDC->SetBkColor(m_BackgroundColor);pDC->SetTextColor(m_TextColor);// TODO: Return a non-NULL brush if the parent's handler should not be calledreturn (HBRUSH)m_brushBk.GetSafeHandle();}2.新建一个ColorMatch类,该类继承于CDialog类,设置对话框页面布局,添加变量和函数;设置对话框所需要的控件,并进行布局打开类向导为控件绑定变量在ColorMatch类的头文件中加入如下代码:public:CFont m_Font;//字体对象void SetColor();//设置颜色函数打开类向导为ColorMatch类添加如下消息映射在ColorMatch类的源文件中加入如下代码:BOOL CColorMatch::OnInitDialog()// 初始化函数{CDialog::OnInitDialog();// TODO: Add extra initialization herem_slider_red.SetRange(0,255,false);//设置滑动控件的范围m_slider_green.SetRange(0,255,false);//设置滑动控件的范围m_slider_blue.SetRange(0,255,false);//设置滑动控件的范围m_Font.CreateFont(50,0,0,0,0,FALSE,FALSE,0,ANSI_CHARSET,OUT_D EFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,LPCTSTR("A rial"));m_EE.SetFont(&m_Font);//设置显示的字体大小m_red.SetBackgroundColor(RGB(255,0,0));m_green.SetBackgroundColor(RGB(0,255,0));m_blue.SetBackgroundColor(RGB(0,0,255));return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE }void CColorMatch::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) /*滑动条被滑动时触发*/{// TODO: Add your message handler code here and/or call defaultSetColor();CDialog::OnHScroll(nSBCode, nPos, pScrollBar);}void CColorMatch::SetColor()//设置颜色函数{int red=m_slider_red.GetPos();//获取红色值int green=m_slider_green.GetPos();//获取绿色值int blue=m_slider_blue.GetPos();//获取黄色值COLORREF color=RGB(red,green,blue);//合成RGB值m_EE.SetBackgroundColor(color);//设置背景颜色m_EE.SetTextColor(16777215-color);//设置字体颜色CString colorstr,redstr,greenstr,bluestr;colorstr.Format("%d",color);//颜色字符串化SetDlgItemText(IDC_EDIT,colorstr);redstr.Format("%d",red);greenstr.Format("%d",green);bluestr.Format("%d",blue);SetDlgItemText(IDC_EDIT_RED,redstr);//修改各种颜色的数值SetDlgItemText(IDC_EDIT_GREEN,greenstr);SetDlgItemText(IDC_EDIT_BLUE,bluestr);}3.编译、链接生成可执行文件进行测试。
MFC出现调试与运行结果不一致的解决方法
![MFC出现调试与运行结果不一致的解决方法](https://img.taocdn.com/s3/m/317d6ddd76a20029bc642d0e.png)
MFC出现调试与运行结果不一致的解决方法
MFC出现调试与运行结果不一致这种情况的原因是因为调试的时候拥有更强大的纠错等功能,建议尝试以下的几个办法解决:
1.打开调试过程中出现的全部的警告,检查可能出问题的地方。
2.尽量不用全局变量。
3.将编译器的优化设置为最低进行调试。
通常有一些比较容易产生这种状况的情况是变量的初始化、数据溢出等,可以优先尝试检查,最后如果还是找不出原因,就设置一个日志文件,记录程序的每一步骤,这是大招,一般能收到立竿见影的效果。
方法可以用比较简单的,如建立一个TXT文件,在关键的认为会出错误的地方设置记录,写进TXT文件中。
运行结束后查看TXT文件,查找出现错误的原因。
3095MFC调试摘要
![3095MFC调试摘要](https://img.taocdn.com/s3/m/59c2d7dd195f312b3169a5ec.png)
3095MFC调试摘要一、建立通讯1、双击桌面上AMS软见图标打开软件,输入用户名admin,密码为空;2、登陆进入以后,如果正常通讯上了,会看见一个类似于表头的蓝色小图标;其中图标表示查找设备。
二、对3095变送器进行一些必要的组态(一)右键点击蓝色小图标,会出现如下界面菜单:(二)菜单中第一个是用于观察各个参数的实际值,这里面所体现的数据不能修改。
(三)菜单中第四个主要用于对3095变送器的组态和参数设置。
点开此菜单会看到如下界面:点击此界面中的第三个图标即可看到如下界面:如果介质是氢气等数据库中存在的介质,则直接选择相应的介质即可;如果介质是三氯氢硅等数据库里没有的介质,则在介质名称里输入相应的介质即可(正常情况下这写都是出场设置好的)。
选好介质点击下一步,出现的界面是让你选择所用的一次元件的类型,在这里用到的是调整型孔板,为最后一项(一般出场已设置好),下面要选择的就是孔径和β值的大小,孔径在计算书上能够体现出来,β值在仪表型号里面就可以看出来;点击下一步,出现的界面是用于设置压力和温度的范围,这要看工艺上的压力和温度范围能达到多少,其他项为出场默认设置,无需重新设置;点击下一步会出现类似于如下界面:如果是数据库里的介质,这里都有数值,无需填写,直接点击完成,然后选择发送数据,等待数据发送完毕即可。
如果是数据库里没有的介质,在这里需要手动填写,密度和粘度的变化趋势如下:1、气体介质下,压力不变的情况下,温度升高,密度减小,粘度增大(粘度变动的幅度很小,一般为0.01;密度变动幅度稍大,温度一定,压力变化的情况下,密度变化幅度大约在1.5,压力一定,温度变化的情况下,密度变化幅度大约在1;2、温度不变的情况下,压力增大,密度增大。
左下角为参考密度,在数据表上会有所体现,右下角为等熵指数和摩尔质量的填写,3095数据库中没有的介质等熵指数一般为1.12或1.13,摩尔质量自己算,点击完成,然后发送数据到变送器,等待数据发送完成即可。
MFC2000-6调试作业指导书最终版.docx
![MFC2000-6调试作业指导书最终版.docx](https://img.taocdn.com/s3/m/358fbdc6227916888586d733.png)
MFC2000-6型微机厂用电快速切换装置现场调试指导书(V1.0)编写:审核:批准:2012-07-19 2012 -05-21 编写江苏金智科技股份有限公司发调试工具及器材调试操作流程调试项目一览表1简明软件功能流程图1/1监控主流程图1・3手动切换,并联方式,工作一备用 备用一工作切换只须将图屮“工作”改为“备用”, 本装宜的各种切换方式和功能以简图方式表示如下: 启动方式 切换方式 切换工作过程 实现方式“备用”改为“工作” O闭锁等待闭锁等待1・4手动切换,同时方式,工作一备用备用一工作切换只须将图屮“工作”改为“备用”,“备用”改为“工作”。
闭锁筹待闭锁等待1.5自动切换(保护起动,失压起动),串联方式闭锁等待1.6自动切换(保护,失压),同时方式闭锁等待1.7自动切换(误跳切换)闭锁等待1・8切换闭锁逻辑2.按设备调试.1.1电源调试技术要求:插上所冇插件,上电后观察装置应正常,MFC2000-6不通于以前的MFC 厂用电快切系 列,未提供电源指示灯进行观察。
MFC2000-6快切电源板是DC110V/220V 通川。
但是调试时必须区分相应的电压等级因为:开入板(DI 板)的电源区分为DC220V> DC110V 这2种;DC220V 是标准配置电源,DC110V 为定制电源。
可通过测® RY 电阻阻值來区分是那种电压等级的开入板,DC220V 的RY 电阻为100K ; DC110V 的RY 电阻为47K 。
另外电源板提供24V 输出作为监测用。
1. 2电源影响试验技术要求:电压缓慢上升,缓慢下降,突然上电,突然掉电,电源开关快速频繁开合情况下,装置 均不应误动或误发信。
1. 3测量试验1. 3. 1电压幅值交流电源系统按静态试验条件接线,一般情况卜,厂用母线接线电压,工作/备用电压接Uab 。
如 己明确具体工程接线,则按实际接线。
系统定值小线电压接入方式是指母线电压的接入方式,口前必须为线电压输入,如果需要相电压输 入,必须更换切换闭锁 闭锁A (不能自复归) 开位界常 保护闭锁 PTI 断线 装置界常 装置动作 闭锁IB (能自复归) 后备失电闭锁 切换退出 切换硬压板退岀 切换软压板退出 • • • ••• •• • • • • • • •• •• • • • 所有切换方式退出模入板。
mfc factor校准原理
![mfc factor校准原理](https://img.taocdn.com/s3/m/7f00db90b04e852458fb770bf78a6529657d3546.png)
mfc factor校准原理摘要:一、MFC Factor 校准原理简介1.MFC Factor 的概念2.校准的重要性二、MFC Factor 校准方法1.标准溶液校准法2.标准曲线校准法3.内标法三、MFC Factor 校准过程中的关键因素1.校准溶液的选择2.校准曲线的绘制3.校准误差的控制四、MFC Factor 校准结果的评估1.校准精度的评估2.校准不确定度的评估3.校准结果的可靠性分析正文:MFC Factor(甲烷流量校准系数)是分析甲烷气体浓度的重要参数,它直接影响着测量结果的准确性。
因此,对MFC Factor 进行定期校准是十分必要的。
本文将详细介绍MFC Factor 的校准原理和方法。
一、MFC Factor 校准原理简介MFC Factor 是指在一定条件下,甲烷流量与甲烷浓度之间的对应关系。
在校准过程中,通过对比实际测量值与理论值之间的差异,可以得出MFC Factor 的修正值,从而提高测量结果的准确性。
二、MFC Factor 校准方法目前常用的MFC Factor 校准方法主要有以下三种:1.标准溶液校准法:通过使用已知浓度的标准溶液,对MFC 进行校准。
在校准过程中,需要分别测量标准溶液的浓度和流量,然后根据测量值计算出MFC Factor。
2.标准曲线校准法:此方法是通过绘制浓度与流量之间的标准曲线,来确定MFC Factor。
在校准过程中,需要分别测量不同浓度的标准溶液的流量,然后根据测量值绘制标准曲线,从而得出MFC Factor。
3.内标法:内标法是在实际测量过程中,加入一种已知浓度的气体(内标气体),通过测量内标气体与目标气体的流量比例,来确定MFC Factor。
这种方法的优点是可以在实际工作条件下进行校准,更能反映实际情况。
三、MFC Factor 校准过程中的关键因素1.校准溶液的选择:为了确保校准结果的准确性,需要选择浓度稳定、易于操作的标准溶液。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在VC程序中使用调试语句为了更好地对程序调试,可以使用如下方法:使用断言、使用跟踪语句、使用异常和返回值。
一、断言1、基本概念断言是一种让错误在运行时候自我暴露的简单有效实用的技术。
它们帮助你较早较轻易地发现错误,使得整个调试过程效率更高。
断言是布尔调试语句,用来检测在程序正常运行的时候某一个条件的值是否总为真,它能让错误在运行时刻暴露在程序员面前。
使用断言的最大好处在于,能在更解决错误的发源地的地方发现错误。
断言具有以下特征:.断言是用来发现运行时刻错误的,发现的错误是关于程序实现方面的。
.断言中的布尔表达式显示的是某个对象或者状态的有效性而不是正确性。
.断言在条件编译后只存在于调试版本中,而不是发布版本里。
.断言不能包含程序代码。
.断言是为了给程序员而不是用户提供信息。
使用断言最根本的好处是自动发现许多运行时产生的错误,但断言不能发现所有错误。
断言检查的是程序的有效性而不是正确性,可通过断言把错误限制在一个有限的范围内。
当断言为假,激活调试器显示出错代码时,可用Call Stack 命令,通过检查栈里的调用上下文、少量相关参数的值以及输出窗口中Debug 表的内容,通常能检查出导致断言失败的原因。
_ASSERTE宏(属于C运行时间库)还能在断言失败时显示出失效断言。
下面我们讨论一下MFC库中的断言。
2、MFC库中的断言(1) ASSERT(布尔表达式)用MFC时最好选择ASSERT宏,它的优点是即使出现了WM_QUIT消息也能显示断言失效消息框。
(2) VERIFY(布尔表达式)VERIFY宏中的布尔表达式在发布版本中被保留下来。
VERIFY宏简化了对函数返回值的检查,一般用来检查Windows API的返回值。
由于VERIFY宏里的布尔表达式在发布版本里保留了下来,因此最好尽量不要使用这个宏以实现程序代码和调试代码的完全分离。
(3 )ASSERT_VALID(指向CObject派生类对象的指针)ASSERT_VALID宏通过调用重载的AssertValid函数来确定指向CObject派生类对象的指针是否有效。
无论你什么时候从CObject派生类中得到一个对象,在对这个对象做任何操作之前都应该调用ASSERT_VALID宏。
(4) ASSERT_KINDOF(类名, 指向CObject派生类对象的指针)这个宏用来验证指向CObject派生类对象的指针是否从某个特殊类中派生,在调用它之前先调用ASSERT_VALID宏。
只有在很特殊的场合下才用得到,如检测编译器可能错过的对象类型问题。
此外,还有两个没有正式文件的ASSERT宏的变种:ASSERT_POINTER(指针,指针类型),ASSERT_NULL_OR_POINTER(指针,指针类型)。
3、什么时候使用断言把断言看作一种简单的制造栅栏的方法,这种栅栏能使错误在穿过自己时暴露。
.检查函数的输入.检查函数的输出.检查对象的当前状态.坚持逻辑变量的合理性和一致性.检查类中的不变量公有成员函数比私有和保护的成员函数需要更全面的断言。
不正确地使用断言会导致错误。
断言应该检测那些在程序正常运行的时候永远都不可能出现的状态。
断言是用来揭示错误的,而不是用来纠正运行时刻错误的。
4、断言与防御性编程(Defensive Programming)断言在调试的时候向程序员揭示运行时刻错误(调试版本里),而防御性编程使用户在运行程序(发布版本里)时,当出现意外情况时程序仍能继续工作。
实际上,防御性的编程要求程序在检测到意外时返回一个“安全”的值(比如布尔函数返回false,指针和句柄返回空值),一个错误代码或者抛出一个异常来解决问题。
特定的防御性编程技术包括:处理无效函数参数和数据、出现问题的时候程序失败、检查临界函数返回的错误代码以及处理异常。
需要防御性编程的标准问题包括:错误的输入数据、内存或者硬盘空间不够、不能打开一个文件、外部设备不能访问、网络连接不上或者甚至在程序中还有错误,目的是保持程序的运行状态。
如果你的程序是防御性的,别忘了使用断言。
如果你使用断言,也别忘了防御性编程。
这两种技术最好结合在一起使用。
二、跟踪语句1、基本概念跟踪语句(trace statements)可使程序执行,并使程序员可对可变值进行查看。
它们提供了一个用于观察的程序,并且独立于一个交互式的调试器,但是最具有特色的是它们常用于对调试器提供的信息进行补充。
在VC中,跟踪消息通常输出到输出窗口中的Debug标签,也可以重新输出到一个文件中。
跟踪语句的特性如下:.跟踪语句用于报告代码中重要的运行事件。
.跟踪语句的编译通常是有条件的,并只存在于调试版本中,而在发布版本中不被编译。
.跟踪语句不能包含程序代码或对程序代码有间接的影响作用。
.跟踪语句的目的是向程序员提供信息,而不是向用户。
跟踪语句也是调试语句,它可以执行程序,并且在运行中程序员可以查看变量。
跟踪语句对于那些使用交互式调试器很难调试的程序是很有效的。
跟踪语句和断言的区别如下:.跟踪语句是无条件的,断言是有条件的布尔语句。
.跟踪语句用于显示程序执行和变量值,不直接显示bug,断言用于显示出bug。
.跟踪语句将信息输出到调试窗口或文件中,可被随意地忽略,断言打断程序的执行。
2、MFC中的跟踪语句在MFC中,你可以使用TRACE和AfxOutputDebugString宏、CObject::Dump虚拟函数和AfxDumpStack函数。
TRACE宏由AfxDump 实现,AfxDump由AfxOutputDebugString实现。
AfxOutputDebugString 宏和AfxDumpStack函数可以在所有版本中编译,其他只能在调试版本中编译。
(1)TRACE宏有以下形式:_TRACE(reportType,format);_TRACE0(reportType,format,arg1);_TRACE1(reportType,format,arg1,arg2);_TRACE2(reportType,format,arg1,arg2,arg3);_TRACE3(reportType,format,arg1,arg2,arg3,arg4);在MFC中,推荐使用TRACEn宏,当使用TRACE宏时需要使用_T宏来格式化参数以正确解决Unicode的校正,而TRACEn不需要。
MFC TRACE宏中的一个缺点是AfxTrace函数使用一个512字符固定大小的缓冲区,这使得它在跟踪长字符串时是无用的。
(2)CObject::DumpCObject类有一个转储(dump)虚拟函数,所有继承CObject的类都可以通过重载这个函数,输出它们的值。
3、Visual C++消息Pragma消息Pragma实际上是一个编译时的跟踪语句,你可以使用它来警告在预处理过程中发现的潜在的编连(build)问题。
典型的例子:#if (WINVER>=0x0500)#pragma message (“NOTE:WINVER has been defined as 0x0500 or greater.”)#endif消息Pragma是非常有用的,尤其是在复杂编连中。
然而,如果你要检测一种特定的问题,而不是潜在的问题,使用#error预处理来代替打断编译会更直接一些。
每当你的程序中有错误而你想得到更多信息的时候,你应该去查看一下跟踪消息。
由于VC输出窗口的缓冲区是有大小限制的,因此如果跟踪消息数据产生的速度超过输出窗口处理的速度,那么消息会塞满缓冲区,导致数据丢失。
避免这个问题的简单方法是在输出大量数据的代码段如转储对象时,调用Sleep API 函数。
三、异常1、基本概念错误是一种条件,在这种条件下,如果不执行额外的处理,线程就不能正常地执行下去。
异常是用于处理错误的。
使用异常的一个很明显的好处就是它们通过发出错误信号,可以让程序代码和错误处理代码分开,而且不会让程序忽略错误,你不用不断地检查函数的返回值,因此它们将程序代码简单化。
另一个好处是它们不需要严格的编程作风。
异常的基本特性:.异常是基于每个进程而提出并处理的。
.异常不能被线程忽略,必须被处理。
.未处理的异常会使进程结束,而不仅仅是结束线程。
.异常出来在释放栈时会释放所有的栈对象,避免了资源的漏洞。
.异常处理需要大量的额外操作,使得它不适于经常运行的代码。
.可以抛出任何类型的异常对象,除了整数。
如果正确执行,异常处理有下面的特性:.异常是不是正常的运行结果,是特殊情况。
.异常在返回值无效的情况下使用。
.异常是可靠的,不可能被忽略。
.异常简化了错误处理,简化了程序代码,使错误处理更加方便。
Visual C++的默认情况下,在调试版本中处理异常,而在发布版本中并不进行处理。
由于异常也是错误,Windows异常码采用了同Windows错误码一样的位映射模式,为一个32位的值,这些码由Microsoft定义,任何异常码的最高四位总是1100(二进制),即十六进制里的0xC。
2、Windows结构异常和C++异常Windows结构异常作为硬件异常(如访问非法或被零除)或操作系统异常的结果被抛出,C++异常只能由throw语句抛出。
Windows结构异常处理不能处理对象的解析,因此你应该在C++程序中一直使用C++异常。
然而,C++异常不能处理硬件和操作系统异常,你的程序需要将结构异常转化为C++异常。
C++异常并不直接从你的程序代码中抛出而是从C++运行库中抛出,因此你需要调用栈窗口来返回你的代码。
为了正确处理硬件和操作系统异常,你可以创建自己的异常类并使用_set_se_translator函数安装一个结构异常向C++异常的转化器,但不要捕获那些不能恢复所产生问题的转化后的结构异常。
3、MFC中的异常在MFC中,所有的异常对象都是从CException基类(它有使用起来非常方便的GetErrorMessage和ReportError成员函数)中派生来的。
大多数的MFC异常对象都是动态分配的,而且当它们被捕获时,必须被删除,而没有被捕获的MFC异常由MFC本身在AfxCallWndProc函数中捕获并删除。
4、异常的开销当抛出C++异常时,函数调用链将从此回溯搜索,寻找可以处理抛出这类异常的处理器。
若没找到,进程结束。
如果找到,调用栈将被释放,所有的自动(局部)变量也将释放,然后栈将被整理为异常处理器的上下文相关设备。
因此异常开销由一个异常处理器目录和一个活动的自动变量表(它需要额外的代码、内存,而且不论异常是否抛出,都会运行),还得加上函数调用链的搜索、自动变量的解析和栈的调整(它只在抛出异常的时候需要执行)组成。
5、异常策略(1)抛出时机抛出异常的时机应该是一个函数发现一个错误,如果没有一些特殊的操作,该错误能阻止程序正常的运行,而这种操作它自己不能完成,或是在函数不可能有返回值的时候。