
C/C++
文章平均质量分 64
ayw_hehe
这个作者很懒,什么都没留下…
展开
-
VC的一些实用技巧和注意事项
<br />[IDE下载和安装] <br />1、VC和MSDN的下载 <br /> 强烈建议安装英文版! <br /> <br />2、安装程序制作工具下载 <br /> InstallShield系列,可以去缘网下载。<br />3、VC插件的下载 <br /> 推荐Vi转载 2010-07-15 09:48:00 · 754 阅读 · 0 评论 -
VC-Debug-Release出错的问题解决办法
<br />转自优快云博客http://blog.youkuaiyun.com/strollerV/archive/2007/12/05/1918122.aspx<br />DEBUG和RELEASE 版本差异及调试相关问题:<br />I. 内存分配问题<br />1. 变量未初始化。下面的程序在debug中运行的很好。<br /> thing * search(thing * something)<br /> BOOL found;<br />转载 2010-07-15 10:00:00 · 1029 阅读 · 0 评论 -
ofstream和ifstream详细用法
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器( 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout>) 从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的转载 2010-07-13 13:25:00 · 564 阅读 · 0 评论 -
异常控制try,catch用法小结
今天整理过去的学习笔记,无意中看到这个,自己写的,居然大部分都不记得,可能是很少用到吧。干脆帖出来,大家有什么补充的。。。1、基础介绍try{//程序中抛出异常throw value;}catch(valuetype v){//例外处理程序段}语法小结:throw抛出值,catch接受,当然,throw必须在“try语句块”中才有效。2、深入throw:(i)、程序接受到throw语句后就会自动调用析构器,把该域(try后的括号内)对象clean up,然后再进入catch语句(如果在循环体中就退出循环)。转载 2010-07-19 11:27:00 · 825 阅读 · 0 评论 -
解决“User breakpoint called from code at XXXX”Bug
<br />原贴地址:http://blog.vckbase.com/hyj/archive/2006/06/28/21006.html除虫记之十二:费解的NTDLL断点<br />处理在NTDll中意外的用户断点<br />很久没有写东西了,这次是为了完善很久很久以前写的一个培训ppt(VC的使用与调试技巧),才想起来写点东西的。下面的文章参考了http://www.debuginfo.com/tips/userbpntdll.html,但不是翻译,偶英语太烂了。<br />我们在调试程序的过程中,有时会转载 2010-07-20 11:18:00 · 705 阅读 · 0 评论 -
XML文件格式
<br />XML文件和HTML文件一样,实际上是一个文本文件。显然大家立刻就会明白,创建XML文件最普通的工具和HTML一样,就是"记事本"了。除了"记事本"之外,当然还有一些更加方便的工具,如XML Notepad、XML Pro、CLIP!XML Editor等,这些工具的一大特点是:能够检查你所建立的XML文件是否符合XML规范。不过,现在这些工具都只有英文版的,并且需要付费使用。当然,你仍然能够使用FrontPage、DreamWeaver等工具,不过使用起来不是很方便。随着XML的逐渐普及,相信转载 2010-07-19 10:08:00 · 5787 阅读 · 2 评论 -
【转】经典软件推荐:AppVerifier(应用程序验证器)
<br />AppVerifier的用法<br />This section discusses how to test an application using AppVerfier.<br />The first thing to note about AppVerifier is that it is not an automated test program for your applications. AppVerifier attaches to a program and performs t转载 2010-07-21 14:47:00 · 802 阅读 · 0 评论 -
使用PageHeap.EXE或GFlags.EXE检查内存越界错误
我推荐使用PageHeap.Exe和Gflags.Exe,主要的原因还是因为当有人问内存越界的错误如何查出来的时候,国外的朋友经常会推荐这两个工具(highly recommend)。我用过之后,也觉得有些时候用用还是有好处的。PageHeap.Exe将针对某个指定的应用程序启用Page Heap标志,从而自动监视所有的malloc、new和heapAlloc的内存分配,找出内存错误。PageHeap.Exe的下载地点:http://download.microsoft.com/download/vc60p转载 2010-07-20 23:34:00 · 677 阅读 · 0 评论 -
C++多线程入门
<br />第1节 背景<br />为了更好的理解多线程的概念,先对进程,线程的概念背景做一下简单介绍。<br />早期的计算机系统都只允许一个程序独占系统资源,一次只能执行一个程序。在大型机年代,计算能力是一种宝贵资源。对于资源拥有方来说,最好的生财之道自然是将同一资源同时租售给尽可能多的用户。最理想的情况是垄断全球计算市场。所以不难理解为何当年IBM预测“全球只要有4台计算机就够了”。<br />这种背景下,一个计算机能够支持多个程序并发执行的需求变得十分迫切。由此产生了进程的概念。进程在多数早期多转载 2010-07-26 20:58:00 · 552 阅读 · 0 评论 -
(转载)标准库:Allocator能做什么?
<br />标准库:Allocator能做什么?<br />The Standard Librarian: What Are Allocators Good For? <br />Matt Austern<br />http://www.cuj.com/experts/1812/austern.htm?topic=experts<br />--------------------------------------------------------------------------------<br /转载 2010-08-09 11:24:00 · 584 阅读 · 0 评论 -
多线程编程之一——问题提出
多线程编程之一——问题提出作者:韩耀旭下载源代码一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下: void CSingleThreadDlg::OnSleepSixSecond() { Sleep(6000); //延时6秒} 编译并运行应用程序,单击“延时6秒”按钮,你就会转载 2010-08-09 14:30:00 · 430 阅读 · 0 评论 -
MFC微型教程
<br />http://soft.yesky.com/lesson/100/2342100.shtml<br />这个小教程,在许久生疏了MFC的情况下看看,感觉还是不错的。原创 2010-08-18 15:52:00 · 565 阅读 · 0 评论 -
__declspec(dllexport)的意思与DEF导出函数的区别
先看代码:以下是在dev-c++里建立自已的dll时的dll.h里面的代码,这里面有一个:_declspec(dllexport)#ifndef _DLL_H_#define _DLL_H_//防重复定义#if BUILDING_DLL# define DLLIMPORT __declspec (dllexport)#else /* Not BUILDING_DLL */# define DLLIMPORT __declspec (dllimport)#endif /* Not BUILDING_DLL *转载 2010-08-19 09:02:00 · 1593 阅读 · 2 评论 -
如何高效阅读代码
<br />摘自http://blog.youkuaiyun.com/oncoding/archive/2009/08/11/4434315.aspx<br />源码阅读,自然是计算机学习的捷径之一,其重要性在此就不再赘述。<br />因项目需要,最近在读OpenSSH & OpenSSL 的源码库,一开始进展奇慢,龟速,后来掌握了一些技巧后,快了一些。在此,将我总结的所谓的“技巧”贴上来,我先扔出一块砖,大家拿玉的砸过来!!<br />读一份好的源码就像挖宝藏。 <br />1.工欲善其事,必先利其器——铁锹? <b转载 2010-08-18 13:43:00 · 1125 阅读 · 0 评论 -
预编译头文件(precompiled header)
<br /> 转自http://www.vcer.net/1047209431368.html<br /> <br />今天在改一个很大的程序,慢慢看,慢慢改。突然发现一个.c文件,里面什么也没有, <br />就几个头文件,我一看,我靠,这不是把简单的问题搞复杂了吗,随手删掉那个c文件。 <br />结果不能编译了,我靠: <br />fatal error C1083: Cannot open precompiled header file: /'Debug/v13_3.pch/': <br />No转载 2010-08-24 13:32:00 · 608 阅读 · 0 评论 -
C++ Gossip: 名稱空間(Namespace)
<br />转自http://caterpillar.onlyfun.net/Gossip/CppGossip/Namespace.html<br />隨著程式碼撰寫越來越多,程式內容越來越大,您會發現管理程式中的變數名稱、函式名稱、類別名稱也會是一件麻煩的事,尤其是一些同名問題的發生,例如在程式中,您也許會定義一個Point類別代表2維空間的點,也許在程式的某個地方,您也會定義一個Point類別來表示一個3維空間的點,其它像函式同名、共用變數同名的情況也可能發生,當這種情況發生時,其中一個定義就可能將另一转载 2010-08-26 14:28:00 · 564 阅读 · 0 评论 -
explicit关键字
<br />转自:http://blog.youkuaiyun.com/ForNormandy/archive/2004/08/19/79512.aspx<br />今天看到公司的代码内有大量的explicit关键字,但是老版的MSDN内例子并不完善,实在是不明白,最终从网上一篇文章内找到了答案:原来explicit是为了防止隐式使用拷贝构造函数的.以下附上从新版MSDN中找到的例子和网上那篇文章:<br />// Copy From MSDN<br />This keyword is a declaration sp转载 2010-08-27 14:06:00 · 495 阅读 · 0 评论 -
DLL和LIB综述 【转】
<br />lib是静态库,dll一般是动态链接库(也有可能是别的)<br /><br />比如要编译个exe,lib在编译的时候就会被编译到exe里,作为程序的一部分<br /><br />而dll是不被编译进去,是运行的时候才调入的(可能是exe刚运行就调入,也可能运行了一半才调入)<br /><br />用法,lib需要个.lib文件和一个.h文件,程序正常使用.h的函数,在链接选项里加入.lib文件就ok<br /><br />dll用法有2种,一是 .h + .lib + .dll的,用法和前面一转载 2010-09-01 13:50:00 · 518 阅读 · 0 评论 -
私有的构造函数
通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?没错,我也知道这将会使构造函数成为私有的,这意味着什么? 我们知道,当我们在程序中声明一个对象时,编译器为调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私有的,由于在class外部不允许访问私有成员,所以这将导致编译出错。 你于是说:“哈哈。”我们制造了一个似乎无法产生对象的class.哦,当然,对于class本身,我们还可以利用转载 2010-09-06 11:20:00 · 554 阅读 · 0 评论 -
numeric_limts
用于取得某数据类型的特征:numeric_limits<T><br />#include <iostream><br />#include <limits><br />#include <string><br /> <br />using namespace std;<br /> <br />int main()<br />{<br /> cout << boolalpha;<br /> <br /> //看函数名字就知道了。<br /> cout << "max(sho转载 2010-09-25 08:50:00 · 872 阅读 · 1 评论 -
try,catch,throw
<br />转自http://hi.baidu.com/sicceer/blog/item/866f867eb19bce340cd7dac0.html<br />要防止因为异常产生的内存泄漏,可以使用智能指针,也可以用 <br />__try <br />{ <br />} <br />__finally <br />{ <br />} <br />《Windows核心编程》一书第23~25章是很好的参考资料。<br />-------------------------------------------转载 2010-09-26 09:13:00 · 1275 阅读 · 0 评论 -
关键字valarray小结
<br />valarray类似vector,也是一个模板类,其主要被用来对一系列元素进行高速的数字计算,其与vector的主要区别在于以下两点<br />1、 valarray定义了一组在两个相同长度和相同类型的valarray类对象之间的数字计算,例如xarr = cos(yarr) + sin(zarr);<br />2、通过重载operater[],可以返回valarray的相关信息(valarray其中某个元素的引用、特定下标的值或者其某个子集)。<br />valarray类用法<br />1.转载 2010-09-25 09:53:00 · 716 阅读 · 0 评论 -
try catch throw用法
try,catch,throw: try包含你要防护的代码,称为防护块. 防护块如果出现异常,会自动生成异常对象并抛出. catch捕捉特定的异常,并在其中进行适当处理. throw可以直接抛出/产生异常,导致控制流程转到catch块. 重要观点: C++中异常是用对象来表示的,称为异常对象. 基本格式:try{ your code; } catch(T1 t1)//T1可以是任意类型,int,char, CException... { //T1指定了你转载 2010-09-26 09:05:00 · 947 阅读 · 1 评论 -
already defined...error LNK2005
<br />编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。 <br /><br />造成LNK2005错误主要有以下几种情况: <br />1.重复定义全局变量。可能存在两种情况: <br />A、对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。正确的应该是在一个CPP文件中定义如下:int g_Test;那么在使用的CPP文件中就应转载 2010-09-26 17:17:00 · 526 阅读 · 0 评论 -
使用BoundsChecker(转载)
<br />BoundsChecker是一个Run-Time错误检测工具,它主要定位程序在运行时期发生的各种错误。 <br /><br />BoundsChecker能检测的错误包括:<br /> 1)指针操作和内存、资源泄露错误,比如:内存泄露;资源泄露;对指针变量的错误操作。<br /> 2)内存操作方面的错误,比如:内存读、写溢出;使用未初始化的内存。<br /> 3)API函数使用错误。<br /><br /> 使用BoundsChecker转载 2010-10-08 09:57:00 · 456 阅读 · 0 评论 -
动态链接库和静态链接库的介绍
<br />http://soft.yesky.com/lesson/318/2166818.shtml原创 2010-10-09 10:10:00 · 717 阅读 · 0 评论 -
Depends工具 使用说明和注意
<br />转自http://blog.vckbase.com/lishengg_blog/archive/2008/05/27/1102.html<br /> <br />近期很多兄弟们问怎么样打包程序,如何获取所需dll的信息,这就需要使用VC所带的Depends软件,该软件在VC6安装目录下的tools文件夹里面 D:/Microsoft Visual Studio/Common/Tools,直接<br />双击执行,然后打开exe文件即可,它主要有下面几个注意事项:<br />1)所编的软件所需转载 2010-10-09 10:21:00 · 13262 阅读 · 2 评论 -
预编译头文件PCH
<br />一、预编译头文件使用经验:<br />如果预编译头文件被正确使用时,它确实大大提高我们编程的效率(你工作中,有多少时间是在等编译完成?很多吧,这个时候一般都很无聊,无奈,浪费时间)。但是他太容易用错了. 下面是几种常见的错误用法.<br />1) 在预编译头文件里include自己的头文件(当然, 如果你的头文件不经常变化, 也可以)<br />原因:自己的头文件一般会经常变, 便利后导致预编译的东东重新编译, 降低了编译速度.<br />2) 在其他的头文件里也include 预编译头文件<b转载 2010-10-10 21:28:00 · 782 阅读 · 0 评论 -
VC如何调用DLL文件
<br />调用DLL,首先需要将DLL文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同。Windows提供了两种将DLL映像到进程地址空间的方法:<br />1. 隐式的加载时链接<br />这种方法需要DLL工程经编译产生的LIB文件,此文件中包含了DLL允许应用程序调用的所有函数的列表,当链接器发现应用程序调用了LIB文件列出的某个函数,就会在应用程序的可执行文件的文件映像中加入一些信息,这些信息指出了包含这个函数的DLL文件的名字。当这个应用程序运行时,转载 2010-10-10 21:42:00 · 952 阅读 · 0 评论 -
OnFileOpen与OnOpenDocument
OnFileOpen是菜单项的响应函数,由它具体调用那个对话框并完成文件的搜索和最终路径的确认。 OnOpenDocument应该是在文件已经选好准备打开的时候触发的,这个时候应该可以处理文件内的具体数据了,所以你具体载入图像应该来重载这个函数,还有View的Update相关函数也要重载。 CWinApp::OnFileOpen调用CDocManager::OnFileOpen。 CDocManager::OnFileOpen首先显示文件打开对话框(AFX_IDS_OPENFILE),然后调用CWinApp转载 2010-10-16 23:48:00 · 12340 阅读 · 2 评论 -
Invalidate()函数
<br />InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效<br />InvalidateRect函数中的参数TRUE表示系统会在你画之前用背景色将所选区域覆盖一次,默认背景色为白色,可以通过设置BRUSH来改变背景色。<br />Invalidate()之后:(MFC的,顺便了)<br />OnPaint()->OnPrepareDC()->OnDraw()<br />所以只是刷新在OnPaint()和OnDraw()函数中的绘图语句。其它地方没有影响。<br />Inv转载 2010-10-17 16:38:00 · 803 阅读 · 0 评论 -
用引用传递函数参数
<br />1.引用传递参数<br /><br /> 传递引用给函数与传递指针的效果一样,传递的是原来的变量或对象,而不是在函数作用域内建立变量或对象的副本。<br /> 在8.6节中,我们看到对swap(int,int)传值方式函数的调用不影响调用函数中的实参,结果并未达到交换数据的预想目的。<br /> 使用指针传递方式的swap(int *,int *)函数的调用,能够达到预定的目的(见8.6 节),但是函数的语法相对传值方式来说比较累赘。首先,在swap()函数内需要重复递引用(derefer转载 2010-12-10 16:27:00 · 908 阅读 · 0 评论 -
关于assert,ASSERT,TRACE,VERIFY
<br />原文出处:http://blog.youkuaiyun.com/jannet262/archive/2006/01/11/576428.aspx<br />assert<br />接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。在的debug版状态下出现。在release版本中不计算传入的表达式。<br />TRACE<br />接收跟printf一样的参数。在debug版的调试状态下出现,在debug窗口中输出信息。在release版本中不计算传入的表达式。<br />ASSER转载 2010-12-14 14:12:00 · 453 阅读 · 0 评论 -
堆和栈的区别
<br />堆和栈的区别<br />一、预备知识—程序的内存分配<br />一个由c/C++编译的程序占用的内存分为以下几个部分<br />1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。<br />2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。<br />3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的转载 2010-12-14 17:14:00 · 406 阅读 · 0 评论 -
assert() 函数用法
<br />原文出处:http://dev.firnow.com/course/3_program/c++/cppjs/20071111/85534.html<br />assert宏的原型定义在assert.h中,其作用是如果它的条件返回错误,则终止程序执行. <br /> 原型定义: <br />显示代码打印<br />1 #include "assert.h" <br />2 void assert( int expression ); <br /> assert的作用是现计算表达式 e转载 2010-12-14 14:01:00 · 719 阅读 · 0 评论 -
内存池
<br />强大的原文出处:http://blog.youkuaiyun.com/060/archive/2006/10/08/1326025.aspx<br />C++ 内存池<br />l 下载示例工程 – 105Kb<br />l 下载源代码 – 17.3Kb<br /> <br />目录<br />l 引言<br />l 它怎样工作<br />l 示例<br />l 使用这些代码<br />l 好处<br />l 关于代码<br />l ToDo<br />l 历史<br /> <br />引言<br />转载 2010-12-14 16:51:00 · 517 阅读 · 0 评论 -
dshow中使用Sample Grabber filter抓取图像
<br />转自:http://blog.youkuaiyun.com/mapper/archive/2008/05/14/2445415.aspx<br />sample Grabber使用两种模式抓取图像:缓冲模式和回调模式,缓冲模式向下传递采样时拷贝每个采样,而回调模式对于每个采样调用程序定义的回调函数。回调模式是动态加载filter,影响程序性能,甚至引起死锁。其中的原因是如果采样是microsoft directdraw surface,在回调期间surface被锁定。win16 lock可以被好的锁定,但两转载 2010-10-25 14:07:00 · 2048 阅读 · 0 评论 -
qsort函数应用大全(转)
<br />转自http://www.cppblog.com/qywyh/articles/3405.html<br />七种qsort排序方法 <br /><br /><本文中排序都是采用的从小到大排序> <br /><br />一、对int类型数组排序 <br /><br />int num[100]; <br /><br />Sample: <br /><br />int cmp ( const void *a , const void *b ) <br />{ <br />return *(int转载 2010-12-15 16:37:00 · 491 阅读 · 0 评论 -
仅通过崩溃地址找出源代码的出错行
<br />原文出处:http://www.luocong.com/articles/show_article.asp?Article_ID=29<br /><br /><br />作为程序员,我们平时最担心见到的事情是什么?是内存泄漏?是界面不好看?……错啦!我相信我的看法是不会有人反对的——那就是,程序发生了崩溃! <br />“该程序执行了非法操作,即将关闭。请与你的软件供应商联系。”,呵呵,这句 M$ 的“名言”,恐怕就是程序员最担心见到的东西了。有的时候,自己的程序在自己的机器上运行得好好的,但是转载 2010-10-29 08:55:00 · 697 阅读 · 1 评论 -
内存分配原理
<br />原文出处:http://hi.baidu.com/spbeijilang/blog/item/a2c9dc432aabe9169213c637.html<br />摘要:内存管理向来是C/C++程序设计的一块雷区,大家都不怎么愿意去碰她,但是有时不得不碰它。虽然利用C++中的smart pointer已经可以完全避免使用指针,但是对于对于指针的进一步了解,有助于我们编写出更有效率的代码,也有助于我们读懂以前编写的程序。<br /> 五大内存分区<br /> 在C++中,内存分成5个区转载 2010-12-31 11:08:00 · 2279 阅读 · 0 评论