- 博客(26)
- 收藏
- 关注
原创 异常处理(四、MFC异常处理)
MFC中异常处理的语法和语义构建在标准C++异常处理语法和语义的基础之上,其解决方案为: MFC异常处理 = MFC 异常处理类 + 宏1 宏 MFC定义了TRY、CATCH(及AND_CATCH、END_CATCH)和THROW(及THROW_LAST)等用于异常处理的宏,其本质上也是标准C++的try、catch和throw的进一步强化,由这些宏的定义可知: CODE:#ifndef
2020-06-03 10:42:03
4600
原创 为你的程序添加系统级热键
很多情况下,我们需要给程序添加一个系统级的热键。就像常用的QQ在启动后,任何时间只要按下Ctrl + Alt + z就能将QQ的主界面调出。当然,我们还可以干其他很多事情!:)我们在为程序加上热键后,每当按下你所设定的快捷键,就会给主窗口发出一个WM_HOTKEY的消息,但很可惜,Class Wizartd并没有它。因此,我们需要按照以下步骤进行处理:假设Project的名字是Temp,那么操作如
2005-12-01 15:31:00
1170
原创 异常处理(六、各种异常处理的对比)
下表给出了从以上Visual C++所支持的四种异常处理进行的对比:异常处理 支持语言 是否标准 复杂度 推荐使用 C异常处理 C语言 准C 单 推荐 C++异常处理 C++语言 标准C++
2005-11-17 23:57:00
1166
原创 异常处理(五、结构化异常处理)
结构化异常处理(Structured Exception Handling,简称SEH)是微软针对Windows程序异常处理进行的扩展,在Visual C++中,它同时支持C和C++语言。SEH不宜与标准C++异常处理和MFC异常处理混用,对于C++程序,微软建议使用标准C++的异常处理。 为了支持SEH,Visual C++中定义了四个关键字(由于这些关键字是非标准关键字,其它编译器不一定支持
2005-11-17 23:54:00
1299
原创 异常处理(三、C++语言异常处理)
1 C++异常处理语法 C++语言的后期改造者们,他们在标准C++语言中专门集成了异常处理的相关语法(与之不同的是,所有的C 标准库异常体系都需要运行库的支持,它不是语言内核支持的)。当然,异常处理被加到程序设计语言中,也是程序语言发展和逐步完善的必然结果。我们看到,C++不是唯一集成异常处理的语言。 C++的异常处理结构为: CODE: try{//可能引发异常的代码}catch(type
2005-11-17 23:48:00
3000
原创 异常处理(二、C语言的异常处理)
1 异常终止 标准C库提供了abort()和exit()两个函数,它们可以强行终止程序的运行,其声明处于头文件中。这两个函数本身不能检测异常,但在C程序发生异常后经常使用这两个函数进行程序终止。下面的这个例子描述了exit()的行为:CODE: #include #include int main(void){ exit(EXIT_SUCCESS); printf("程序不会执行到这里/n")
2005-11-17 23:36:00
3484
原创 异常处理(一、前言)
Visual C++提供了对C语言、C++语言及MFC的支持,因而其涉及到的异常(exception)处理也包含了这三种类型,即C语言、C++语言和MFC的异常处理。除此之外,微软对C和C++的异常处理进行了扩展,提出了结构化异常处理(SEH)的概念,它支持C和C++(与之相比,MFC异常处理仅支持C++)。 一个典型的异常处理包含如下几个步骤: (1)程序执行时发生错误; (2)以一个异常
2005-11-17 23:32:00
1181
转载 在VC程序中使用调试语句----(四)返回值
四、返回值 并不是在所以场合下都能使用异常,如在使用Windows API编程或带有COM编程时并不使用异常。在异常不适合的时候,使用返回值是一个好的办法。返回值的基本特性:.返回值可以指示正常和不正常的函数运行,但不能阻止线程的继续运行。.返回值很容易被忽略。.返回值在典型情况下是一个整数,通常映射符合于一个预定义的值。.返回值能高效地传递和接收。因此,返回值最适合用于以下的情形:.用于非错误
2005-11-17 01:44:00
1013
转载 在VC程序中使用调试语句----(三)异常
三、异常1、基本概念 错误是一种条件,在这种条件下,如果不执行额外的处理,线程就不能正常地执行下去。异常是用于处理错误的。使用异常的一个很明显的好处就是它们通过发出错误信号,可以让程序代码和错误处理代码分开,而且不会让程序忽略错误,你不用不断地检查函数的返回值,因此它们将程序代码简单化。另一个好处是它们不需要严格的编程作风。异常的基本特性:.异常是基于每个进程而提出并处理的。.异常不能被线程忽略
2005-11-17 01:43:00
1470
转载 在VC程序中使用调试语句----(二)跟踪语句
二、跟踪语句1、基本概念 跟踪语句(trace statements)可使程序执行,并使程序员可对可变值进行查看。它们提供了一个用于观察的程序,并且独立于一个交互式的调试器,但是最具有特色的是它们常用于对调试器提供的信息进行补充。在VC中,跟踪消息通常输出到输出窗口中的Debug标签,也可以重新输出到一个文件中。跟踪语句的特性如下:.跟踪语句用于报告代码中重要的运行事件。.跟踪语句的编译通常是有
2005-11-17 01:40:00
1371
转载 在VC程序中使用调试语句----(一)断言
为了更好地对程序调试,可以使用如下方法:使用断言、使用跟踪语句、使用异常和返回值。一、断言1、基本概念 断言是一种让错误在运行时候自我暴露的简单有效实用的技术。它们帮助你较早较轻易地发现错误,使得整个调试过程效率更高。 断言是布尔调试语句,用来检测在程序正常运行的时候某一个条件的值是否总为真,它能让错误在运行时刻暴露在程序员面前。使用断言的最大好处在于,能在更解决错误的发源地的地方发现错误。断
2005-11-17 01:37:00
1775
转载 内存空间与分配
1、内存分配错误 动态内存分配错误有两种基本类型:内存错误和内存泄漏。(1)内存错误 当一个指针或者该指针所指向的内存单元成为无效单元,或者内存中分配的数据结构被破坏时,就会造成内存错误。指针未被初始化,指针被初始化为一个无效地址,指针被不小心错误地修改,在与指针相关联的内存区域被释放后使用该指针(这种指针被称为虚悬(dangling)指针),这些都会使指针变为无效指针。当通过一个错误指针或者
2005-11-17 01:35:00
1411
转载 wParam和lParam
这两个是Win16系统遗留下来的产物,在Win16API中WndProc有两个参数:一个是WORD类型的16位整型变量;另一个是LONG类型的32位整型变量。因此根据匈牙利命名法,16位的变量就被命名为wParam, 而32位的变量就被命名为lParam。到了Win32API中,原来的16位变量也被扩展为32位,因此wParam和lParam的大小完全相同。在Win32API的早期,为了保证和Wi
2005-11-17 01:31:00
1234
转载 指针的爱情
1 指向变量的指针变量: 出身: int * point; 遭遇: 两人都另有新欢 心声: 你可以变心,我也可以爱别人,很公平。 2 指向常量的指针变量: 出身: const int * point; 遭遇: 抛弃对方 心声: 说过多少回了,我们之间已经结束了,你别再缠着我了,告诉你,我已经有了新的女朋友了3 指向变量的指针常量: 出身: int * const point;
2005-11-17 01:25:00
743
转载 数组的定义
下面那些数组的定义是不合法的?为什么?CODE: int get_size(); int buf_size = 1024; (a) int ia[buf_size]; (b) int ia[get_size()]; (c) int ia[4*7-14]; (d) int ia[2*7-14]; (e) char st[11]="fundament
2005-11-17 01:22:00
1056
转载 DLL中调用约定和名称修饰(三)
DLL中调用约定和名称修饰(三)2、C++编译时函数(非类成员函数)名称修饰当函数使用__cdecl调用约定时,编译器进行以下工作:1.以?标识函数名的开始,后跟函数名;2.函数名后面以@@YA标识开始,后跟返回值和参数表;3.当函数的返回值或者参数与C++类无关的时候,返回值和参数表以下列代号表示: B:constD:charE:unsigned charF:shortG:unsig
2005-11-17 01:14:00
1001
转载 DLL中调用约定和名称修饰(二)
DLL中调用约定和名称修饰(二)4、thiscallthiscall调用约定是C++中的非静态类成员函数的默认调用约定。thiscall只能被编译器使用,没有相应的关键字,因此不能被程序员指定。采用thiscall约定时,函数参数按照从右到左的顺序入栈,被调用的函数在返回前清理传送参数的栈,只是另外通过ECX寄存器传送一个额外的参数:this指针。这次的例子中将定义一个类,并在类中定义一个成员函数
2005-11-17 01:11:00
830
转载 DLL中调用约定和名称修饰(一)
DLL中调用约定和名称修饰(一)调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议。这种协议规定了该语言的函数中的参数传送方式、参数是否可变和由谁来处理堆栈等问题。不同的语言定义了不同的调用约定。在C++中,为了允许操作符重载和函数重载,C++编译器往往按照某种规则改写每一个入口点的符号名,以便允许同一个名字(具有不同的参数类型或者是不同的作用域)
2005-11-17 01:06:00
1140
转载 __cdecl,__fastcall, __stdcall
__cdecl,__fastcall, __stdcall 什么区别?函数参数入栈的方式 --------------------------------------------------------------- 在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式。 比如说__cdecl,它是标准的c方法的堆栈调用方式,就是在函数调用时的参数压入堆栈是与函数的声明顺序相反的,
2005-11-17 01:02:00
906
转载 句柄和指针
句柄是一些表的索引也就是指向指针的指针,句柄和指针都是地址,句柄是Windows编程的一个关键性的概念,编写Windows应用程序总是要和各种句柄打交道。 所谓句柄,就是一个唯一的数,用以标识许多不同的对象类型,如窗口、菜单、内存、画笔、画刷、电话线路等。在Win32里,句柄是指向一个“无类型对象”(void*)的指针,也就是一个4字节长的数据。无论它的本质是什么,句柄并不是一个真正意义上的
2005-11-17 01:00:00
1011
转载 Release 和 Debug版有什么不同
Release 和 Debug版有什么不同Debug版本就是调试版本,Visual C++ 6.0默认的就是Debug版本。在Debug版本中,可以使用单步执行、跟踪等功能,但其生成的可执行文件比较大,代码运行比较慢。Release版本就是发行版本,其运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。 还有一点,Release版本的exe文件链接的目标是标准的MFC DL
2005-11-17 00:58:00
1148
转载 编译和链接(compile and link)
编译和链接(compile and link)编译: 1 由预处理程序执行C 源文件中的预处理指令 2 C编译器把经过预处理的C代码文件编译成汇编代码文件 3 汇编编译器把汇编代码文件编译成目标代码文件链接: 4 链接程序把所有的目标代码链接起来产生可执行文件 目标代码以机器码的形式存在。
2005-11-17 00:57:00
7515
转载 内存对齐
文主要包括二个部分,第一部分重点介绍在VC中,怎么样采用sizeof来求结构的大小,以及容易出现的问题,并给出解决问题的方法,第二部分总结出VC中sizeof的主要用法。 1、 sizeof应用在结构上的情况 请看下面的结构: struct MyStruct { double dda1; char dda; int type }; 对结构MyStruct采用sizeof会出现什么结果呢?sizeo
2005-11-17 00:43:00
700
转载 VC项目文件说明
.opt 工程关于开发环境的参数文件。如工具条位置等信息; .aps (AppStudio File),资源辅助文件,二进制格式,一般不用去管他;.clw ClassWizard信息文件,实际上是INI文件的格式,有兴趣可以研究一下.有时候ClassWizard出问题,手工修改CLW文件可以解决.如果此文件不存在的话,每次用ClassWizard的时候会提示你是否重建;.dsp (Develope
2005-11-17 00:40:00
1012
转载 在VC中编译、运行程序的小知识点
1、Run-Time LibraryRun-Time Library是编译器提供的标准库,提供一些基本的库函数和系统调用。我们一般使用的Run-Time Library是C Run-Time Libraries。当然也有Standard C++ libraries。 C Run-Time Libraries实现ANSI C的标准库。VC安装目录的CRT目录有C Run-Time库的大部分源代码。
2005-11-17 00:34:00
692
转载 亲密接触VC6.0编译器
大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? 闲话少说。我们
2005-11-16 23:55:00
657
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人