- 博客(27)
- 资源 (9)
- 收藏
- 关注
转载 Win32 异常处理
这回接着处理上一篇文章留下的问题:如何处理EXCEPTION_DEBUG_EVENT这类调试事件。这类调试事件是调试器与被调试进程进行交互的最主要手段,在后面的文章中你会看到调试器如何使用它完成断点、单步执行等操作。所以,关于这类调试事件的处理很自由,调试器的作者可以根据需要进行不同的处理。但是,在对其进行处理之前必须要了解一些关于异常的知识,这也是本文的重点。(本文的内容参考了《软件调试》一书)
2013-05-09 23:17:45
840
转载 Autoexp.dat
使用VS2008进行调试时,有些变量显示不够直接,需要一层一层的展开才能得到直观的变量内容。虽然不难,但是很影响效率。我们可以通过修改autoexp.dat来修改变量在debug Visualizer的显示。 第一步,打开调试时对变量进行Auto Expand功能 第二步,很关键,也是本文关注的重点。autoexp.dat文件在 VS的安装目录Common7\Packa
2012-10-10 08:44:52
1130
原创 函数对象的简单应用
在一些管理系统中,经常需要对这种那种属性进行比较排序。可以通过stl容器跟函数对象将代码写的非常简洁。简单的事例: #include #include #include using namespace std;struct StudentInfo{public: struct SortHelper { enum SortField {
2012-09-26 15:36:59
310
原创 VS调试技巧
调试技巧1 Visual Studio的调试技巧VS调试器是一功能非常强大的调试工具。使用调试器,可以中断程序的执行以检测代码逻辑的正确性,计算和编辑程序过程中的变量。在使用VS调试代码的过程中,多使用VS提供的快捷键,减少鼠标移动时间,提高调试的效率。 1.1 常用快捷键:F5执行到下一个断点Shift + F5停止调试
2012-09-21 08:42:28
625
转载 函数对象
[STL]函数对象/仿函数 提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法。容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的基本算法,迭代器是由容器提供的一种接口,算法通过迭代器来操控容器。接下来要介绍的是另外的一种组件,函数对象(Function Object,JJHou译作Func
2012-09-21 08:33:31
466
转载 new & delete
C++里允许用户通过自定义operator new的方式来更改new表达式的行为,这给了程序员定制内存管理方案的自由。但是享受这种自由的时候必须遵守一定的规范,具体可以参见《Effective C++ 2nd》的相关条款。本文补充解释一些特别容易引起误解的问题。 operator new和operator delete都有其正规形式(normal signature):
2012-09-21 08:16:24
257
原创 注册C函数在main函数前执行
定义一个C函数:void CInit(){ atexit(CExit); printf("4\n");}将一CInit函数指针存放到 ".CRT$XC*"段中 (*为B-Y之间)typedef void (__cdecl *PVFV)();#pragma section(".CRT$XCD", long, read)__declspec(allocate(".C
2012-09-20 21:28:43
5836
原创 简单的程序效率分析工具
QcFunctionProfiler.h:#ifndef QC_FUNCTION_PROFILER_H#define QC_FUNCTION_PROFILER_H/*** 这工具用于分析多程序片段运行的时间.** ** 用法:** 1) 用宏PROFILER_FUNCTION_ON() 打开分析开关** 2) 在需要分析片段的前后分别加上 PROFILER_FU
2012-08-31 09:37:44
314
原创 MFC 消息类型
MFC 消息类型:按照消息的范围来分,可以分成四大类消息:1) 系统消息 (0 到WM_USER–1)2) 窗口类内部自定义消息 (WM_USER
2011-07-24 11:04:39
2484
原创 MFC的消息过程
MFC 窗口消息流程: MFC把Windows的窗口句柄HWND封装成一个CWnd类,每个MFC窗口类(对话框除外)的Create最终都是会调用基类的CWnd::CreateEx过程。在CWnd::CreateEx过程中:1) 调用PreCreateWindow虚函数允
2011-07-23 19:08:07
997
原创 VS快捷键提高开发效率
Tools--àCustomize--àKeyboard. 弹出快捷键设置对话框。查找命令是一般是用菜单上的字符串去检索。具体有什么技巧可以快速的找到想要的命令。这个就不得而知。 常用的VS默认快捷键1)收缩代码定义Ctrl+M, 命令 快捷键 功能 edit.to
2011-07-11 22:42:14
736
转载 LockWindowUpdate 的误用
LockWindowUpdate系列1:LockWindowUpdate的行为?<br />对LockWindowUpdate可怜的误解。 这是关于LockWindowUpdate系列的第一篇。LockWindowUpdate的行为,它是用于做什么的,以及(可能更重要的是)它不是用于做什么。 LockWindowUpdate做的事情其实很简单。当一个窗口被“锁定”,所有向它及其子窗口的绘制都会失败。取代绘制操作的是,窗口管理器记住了应用程序试图在窗口的哪一部分中进行绘制。当窗口“解锁”后,这些区域被
2011-06-01 21:49:00
987
原创 单件模板
<br />单件在实际开发过程中用的很多。就类似C中的全局变量一样。下面介绍两种单件的写法:<br />第一种:使用模板<br />template <class T><br />class QcSingleton<br />{<br /> friend typename T;<br />private:<br /> QcSingleton(){}<br />public:<br /> ~QcSingleton(){}<br /> static T* GetInstance()<br /> {<br />
2011-05-17 22:44:00
216
原创 连续序列最大和
<br />int arrayNum[] = {-2,1,-4,6,-5, 10,-1, 4,-1,2,-5,10,-7,-1,-1,-50};<br />int GetMaxSum(int* pNum, int n)<br />{<br /> int SecondMax = pNum[0];<br /> int Max = pNum[0];<br /> int beginIndex = 0;<br /> int endIndex = 0;<br /> int i = 0;<b
2011-04-06 22:16:00
204
转载 OSG在VS2008下的配置安装
这两天心血来潮,突然想学点OSG的东西,其实OSG本身是挺好用的,就是编译安装有点让人头疼,佛祖保佑,终于编译成功了,为便来着参考,将过程记录如下:一、准备工作下载相关的工具软件:1, 最新版的OSG库:OpenSceneGraph-2.8.2.zip。2, 安装源代码所需要的工具:cmake-2.6.4-win32-x86.zip3, Windows支持的图像库:3rdParty_Win32Binaries_vc90sp1.zip,因为我用的是vc2008,如果用vc05应该有其它针对的版本4, 数据文件
2011-04-05 20:33:00
314
转载 Qt集成到VS2008中 ( Qt4.5.1 + qt-vs-addin-1.0.0 )
<br />如何将Qt集成到VS中,网上已经有不少的文章。我前一段时间试了一下,花了三天时间,编译了好几次才算是完全编译成功,并把Qt4.5.1集成到了VS2008中。在这里把经验分享一下。<br /> 1、首先确保VS2008安装好,我用的是VS2008英文版,最好不要用Express版的,因为如果用这个精简版本,qt-vs-addin装不上去。而且VS2008中文版我试过,qt-vs-addin不能用,不知道是怎么回事。<br /> 2、下载qt-win-opensource-src-4.5
2011-04-05 20:28:00
248
原创 防止类被派生
<br />可以通过虚拟继承来实现此功能。<br />建立一个辅助类Assistant,不包含有任何数据,仅仅是将构造函数私有化,设置目标类TargetClass为友元类。让目标类TargetClass派生于辅助类TargetClass。如下:<br />classAssistant<br />{<br /> friendclassTargetClass;<br />private:<br /> Assistant(){}<br />};<br /> <br />classTarget
2011-04-05 13:33:00
188
原创 修改基类访问权限
<br />问题:我们经常扩展别人写好一个类的功能,为了防止别人错误地使用我们扩展的功能,我们需要屏蔽直接调用原基类的功能。例如:<br />classbase{ <br />public:<br /> voidDo(){}<br /> voidAdd(base* pBase){} <br /> voidRemove(base* pBase){}<br />};<br />//我们扩展base的Add, Remove功能,在这两个函数里需要处理一些derive
2011-04-05 13:31:00
377
原创 输出小于某个数的所有质数
<br />void PrimeNumberArray(int number)<br />{<br /> if (number > 1)<br /> {<br /> number += 1;<br /> int* pNumberArray = (int*)malloc(sizeof(int) * number);<br /> for (int i=0; i<number; i++)<br /> {<br /> pNum
2011-04-05 10:27:00
309
原创 整数拆分N个数的和
<br />例如:<br />4=1+1+1+1;<br />4=1+1+2;<br />4=1+3;<br />4=2+2;<br />4=4;<br /> <br />代码实现:<br />int buf[50] = {0};<br />int num = 10;<br />void separateNumber(int number, int nPart, int nIndex)<br />{<br /> if (nPart == 1)<br /> {<br /> buf[n
2011-04-03 21:18:00
1132
原创 强制友元法
<br /> 很多时候我们都是基于一些别人写好的库来实现我们的功能,然而有时我们是很有需要修改一些库开发者不期望被修改的代码时.例如:<br />Class CObject1<br />{<br />Friend class object2;<br />Protected:<br /> Int m_value;<br />}<br />Class CObject2<br />{<br />Public:<br />Vitrual Void DoSomething()<br />{<b
2011-04-03 11:21:00
166
原创 计算一个数的阶乘值
<br />//假设得到的值不会超过100位<br />void factorial(int buf[100],int num)<br />{<br /> buf[0]=buf[1]=1;<br /> for(int currentN=1;currentN<=num;currentN++)<br /> { <br /> int index = 0;<br /> for(index=1;index<100;index++) <br /> {<br
2011-04-03 10:44:00
262
原创 输出一个序列的全排列
<br />int arrayNum[] = {1,2,3,5};<br />void printArray(int nIndex)<br />{<br /> int n = sizeof(arrayNum) / sizeof(arrayNum[0]);<br /> int temp = arrayNum[nIndex];<br /> //递归到最后一个元素,输出<br /> if (nIndex == n -1)<br /> {<br /> for (int j
2011-04-03 10:11:00
241
原创 C/C++之反转链表
<br />1)<br />node* resver(node* pNode)<br />{<br /> node* pPre = NULL;<br /> node* pCurrent = pNode;<br /> node* pNext = NULL;<br /> while (pCurrent)<br /> {<br /> //先保存当前结点的下一结点<br /> pNext = pCurrent->pNext;<br /> pCurrent->pNext = pPre;<br /> //将链表
2011-04-03 08:40:00
697
原创 预编译
编译器为了加快编译速度,默认将一常用的,不经常修改的一头文件设成预编译头文件。这个头文件在工程编译开始前,先将预编译头文件先展开编译好。编译.cpp, .c等源文件,若此文件是使用预编译头的话,编译器会忽略一切代码直到遇到 #include 预编译头文件,当然也可以不使用预编译头。例如:a.h, 被设成预编译头文件。b.cpp#include “stdio.h”aaa#include “a.h”则编译b.cpp时, #include “stdio.h”aaa这些语句会被忽略,尽管aaa语句不合法,编
2011-04-01 20:07:00
216
原创 宏的简单总结
<br />1) 宏中"#"和"##"的的简单用法:<br />“#” 可以把宏参数变成一个字符串。<br />“##” 可以把两个宏参数链接成一个符号。<br />例如:<br />#define STR(s) #s<br />#define CONNECT(a, b) { a##e##b}<br />int main() <br />{ <br /> printf(STR(abc)); // 输出字符串"abc" <br /> printf("
2011-04-01 19:36:00
180
原创 scanf函数的用法
<br /><br />很多编程初学者在用scanf()函数的过程当中遇到不少的问题。比如:1:想要输入一个含有空格,tab键的字符串,该怎么办呢?2:当一不小心输入的数据与输入的格式不匹配,该如何从新输入呢?<br /> 1: 对于第一个问题,很多人想直接通过scanf("%s",str); (str是一字符指针); 你会发现空格或者tab键后面的字符串并没有输入到str中。这是因为scanf遇到空格就默认为一个数据输入的结束。为了解决这个问题,我们可以用%[]的格式输入。例如:<br />#inc
2011-03-20 20:56:00
223
基于MFC SP1的自定义皮肤
2011-05-16
VC写的仓库管理系统
2011-05-14
GDI矢量绘图小程序
2011-04-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人