C++
dongzhiquan
吉大计算机毕业,南京,程序员.
展开
-
CString,int,string,char*之间的转换
CString,int,string,char*之间的转换2007-06-15 16:451 CString,int,string,char*之间的转换 string 转 CString CString.format("%s", string.c_str()); char 转 CString CString.format("%s原创 2009-06-27 10:00:00 · 488 阅读 · 0 评论 -
即时调试(Just-in-timeDebugging) Visual Studio调试 断点中断程序的执行(断点指令)
VC中的Just-in-time调试,使用该调试模式应用程序可以再Visual C++开发环境之外运行知道发生一个错误.当遇到一个程序错误时,Just-in-time调试自动加载Visual C++ Debugger .要打开Just-in-time调试只需要修改Tools->Options->Just-in-time debugging选项即可(其实该选项所做的操作就是写了个注册表,原创 2009-09-18 23:08:00 · 2915 阅读 · 3 评论 -
什么时间调用 UpdateData() --MFC函数
UpdateData,顾名思义,是用来刷新数据的。 UpdateData(TRUE) -- 刷新控件的值到对应的变量 UpdateData(FALSE) -- 拷贝变量值到控件显示例如,窗口中用 DDX_Text(pDX, IDC_EDIT1,m_usercode);将IDC_EDIT1编辑框控件与m_usercode变量做了关联,如果修改m_userc转载 2009-09-23 23:30:00 · 1005 阅读 · 0 评论 -
传递参数给函数
按值传递一个参数给函数就是制作该参数的一个独立复本,即一个只存在于该函数内的复本。即使按引用传递对象和数组时,如果直接在函数中用新值覆盖原先的值,在函数外并不反映新值。只有在对象的属性或者数组的元素改变时,在函数外才可以看出。 param.message = "I was changed";// 由于是新创建了对象,所以将不会在函数外反映新值,新值仅在函数内有效原创 2009-12-14 21:41:00 · 549 阅读 · 0 评论 -
委托、事件和回调函数这3者之间到底是什么关系
简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。 为什么要使用回调函数? 因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。 回调函数:就是指向转载 2010-03-18 23:44:00 · 947 阅读 · 0 评论 -
Catch(...) C++中三个点
C语言中实现参数个数可变的函数 采用C语言编程的时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的所有实际参数。但在某些情况下希望函数的参数个数可以根据需要确定。典型的例子有大家熟悉的函数printf()、scanf()和系统调用execl()等。那么它们是怎样实现的呢?C编译器通常提供了一系列处理这种情况的宏,以屏蔽不同的硬件平台造成的差异,增加程序的可转载 2010-01-07 11:36:00 · 2803 阅读 · 1 评论 -
Windows API介绍及用法:CreateFileMapping和MapViewOfFile函数(进程间数据共享)
在开发软件过程里,也经常碰到进程间共享数据的需求。比如A进程创建计算数据,B进程进行显示数据的图形。这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开发,加快软件的开发速度。下面就来使用文件映射的方式进行共享数据。先要使用函数 CreateFileMapping来创建一个想共享的文件数据句柄,然后使用MapViewOfFile来获取共享的内存地址,转载 2010-04-20 11:25:00 · 4218 阅读 · 0 评论 -
VC
默认参数 在C++中,可以为参数指定默认值。在函数调用时没有指定与形参相对应的实参时, 就自动使用默认参数。 默认参数的语法与使用: (1)在函数声明或定义时,直接对参数赋值。这就是默认参数; (2)在函数调用时,省略部分或全部参数。这时可以用默认参数来代替。 注意: (1)默认参数只可在函数声明中设定一次。只有在无函数声明时,才可以在函数定义中设定。(即在第一次出现时设定) (2)默认参数定义的顺序为自右到左。即如果一个参数设定了缺省值原创 2010-07-01 10:14:00 · 523 阅读 · 0 评论 -
调试dll
1:把dll的项目直接放进带有exe启动的项目,引用,调试2:直接启动dll项目: 项目属性的“启动操作”里把调试模式该为程序,并在“启动应用程序”栏选取exe程序。 这样vs.studio会先把那个exe启动起来。当然那个exe如果调用了这个dll的话,在这里设置断点就没问题了。 比如,我提供了一个exe程序,里面有一大堆的处理,其中一个需要调用xx.dll。某开发者只有xx.dll的源码,没有exe的源码,但是又必须调试改dll源码。这时就可以使用这种方式来调试了。转载 2010-07-19 23:29:00 · 619 阅读 · 0 评论 -
通过lib对动态链接库DLL进行引用的项目,发布时DLL放置的位置
Windows将遵循下面的搜索顺序来定位DLL: 1.包含EXE文件的目录, 2.进程的当前工作目录, 3.Windows系统目录, 4.Windows目录, 5.列在Path环境变量中的一系列目录。转载 2010-07-21 20:45:00 · 692 阅读 · 0 评论 -
静态链接库LIB和动态链接库DLL
lib静态链接转载 2010-07-22 17:23:00 · 1256 阅读 · 0 评论 -
delete,delete[],delete void*
renren6250(刀客) 的说法是比较全面的. 对于简单数据类型int,char等的数组使用delete 还是 delete[]是完全一样的,对于类的实例的数组必须使用delete[]; C++随笔 delete void * 用了这么久的C++,才发现C++是目前所有的编成语言中最为复杂的一种,C++之路, 艰难.....转载 2009-07-15 17:10:00 · 725 阅读 · 0 评论 -
Visual Assist X尽量避免在非英文目录下使用,否则可能由于文件路径不能识别而导致不能进行提示
Visual Assist X尽量避免在非英文目录下使用,否则可能由于文件路径不能识别而导致不能进行提示原创 2009-07-08 13:46:00 · 832 阅读 · 0 评论 -
CodePage简介(转)
CodePage简介(转) 1. Codepage的定义和历史字符内码(charctercode)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为单字节内码 -- Single-Byte character sets (SBCS),可以支持256个字符编码. 双字节内码 -- Double-Byte ch原创 2009-06-27 10:03:00 · 134656 阅读 · 0 评论 -
CString 操作指南
CString 操作指南 原著:Joseph M. Newcomer 翻译:littleloach原文出处:codeproject:CString Management 通过阅读本文你可以学习如何有效地使用 CString。 CString是一转载 2009-06-27 09:51:00 · 428 阅读 · 0 评论 -
CP Socket编程 C/C++实现 (Windows Platform SDK)
CP Socket编程 C/C++实现 (Windows Platform SDK)收藏 document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() {原创 2009-06-27 10:15:00 · 845 阅读 · 0 评论 -
如何用vc创建和读取xml文件??
如何用vc创建和读取xml文件??楼主cwcsdn(nic)2005-04-28 00:23:32 在 VC/MFC / 基础类 提问能给一个简单的例子吗??问题点数:60、回复次数:7Top1 楼edaynet(忆天)回复于 2005-04-28 05:19:36 得分 60void CXmlDlg::OnCre原创 2009-06-27 10:16:00 · 1101 阅读 · 0 评论 -
关于C++中的内联函数(inline)
在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。 可能说到这里,很多人还不明白什么是栈空间,其实栈空间就是指放置程序的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,如果频繁大量的使用就会造成因栈空间不足所造成的程序出错的问题,函数的死循环递归调用的最终结果就是导转载 2009-09-03 23:46:00 · 604 阅读 · 0 评论 -
VC中调用 Excel 的总结
1、MSDN 上的代码,很好的例子 #include "excel8.h" // OLE Variant for Optional. COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);转载 2009-06-30 11:13:00 · 1203 阅读 · 0 评论 -
CoInitialize与CoInitializeEx,AfxOleInit()的不同 控制台程序中AfxOleInit失效原因
CoInitialize()和AfxOleInit()都是初始化COM库,可它们有什么不同呢 OLE是建立在COM之上的技术,层次比COM要高。AfxOleInit()调用的是OleInitialize(),而 OleInitialize()除了调用CoInitializeEx()来初始化COM库外,还进行一些其它的操作,这些操作对OLE应用来说是必须的,这些OLE应转载 2009-07-01 10:56:00 · 2001 阅读 · 0 评论 -
sprintf函数的用法
sprintf函数的用法(2006-4-19 19:33:00)【收藏】 【评论】 【打印】 【关闭】 自《CSDN 社区电子杂志——C/C++杂志》 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf转载 2009-07-02 13:30:00 · 502 阅读 · 0 评论 -
逻辑与运算
对于逻辑与运算,如果第一个表达式为false,则第二个表达式将不验证所以!(y--对于或运算,若第一个表达式的值为false,则还要验证第二个表达式原创 2009-09-10 16:40:00 · 893 阅读 · 0 评论 -
关于Debug Release
关于Debug&Release在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当头一棒啊,可是疼归疼,问题总要解决,下面将讲述一下我的几点经验,看看是不是其中之一:1. 变量。 大家都知道,debug跟release在初始化变量时所做的操作是不同的,debu原创 2009-09-07 22:38:00 · 731 阅读 · 0 评论 -
Windows服务程序的调试
摘自:MSDN 1.由于服务必须从服务控制管理器的上下文中运行,而不是从 Visual Studio 中运行,因此调试服务不像调试其他 Visual Studio 应用程序类型那样简单。若要调试服务,必须首先启动服务,然后将一个调试器附加到正在运行服务的进程中(AttachToProcess)。 附加到服务的进程使您能够调试大多数服务代码,但并非全部;例如,由于服务已经启动,因此不能用这种方法调试服务的 OnStart 方法中的代码,或调试用于加载服务的 Main 方法中的代码。(不断循环的那原创 2010-07-30 00:42:00 · 768 阅读 · 0 评论 -
在共享DLL中使用MFC和在静态库中使用MFC有什么区别
"在共享DLL中使用MFC"指的是打包时一些MFC的DLL的内容没有被硬编码到在EXE文件中,所以EXE会文件较小,但是运行时要求运行的系统环境中要有相关的DLL文件. "在静态库中使用MFC"是将DLL对应的lib静态库中的相关代码硬编码到EXE文件中,文件较大,但是可以在没有已经被包含DLL的机器上运行,当然即使如此也并非所有的DLL都会将其硬编码到Exe中,因此仍然某些DLL是必须的.比如Redistributable Package中的内容.转载 2010-07-31 15:10:00 · 917 阅读 · 0 评论 -
C++继承
突然有人问起C++继承,一段时间不用就忘记了,所以记下来.而且也看到都不知道的一些新鲜东西.工作后一直是public,所以一直以为类的继承是默认公有继承的,而且认为这样子更加合理,不过今天看到原来默认是私有继承的,想想也又有它的合理性,因为与结构体相比较,类更加强调封装,而结构体更加强调其内部组织结构,所以涉及到类的一些默认状态往往趋向于有利于封装,而结构体则相反. 通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来转载 2010-12-08 00:06:00 · 1052 阅读 · 0 评论 -
STL中的常用的vector,map,set,Sort用法
<br />C++的标准模板库(Standard Template Library,简称STL)是一个容器和算法的类库。容器往往包含同一类型的数据。STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等。 <br />. <br />一. vector <br />1.声明: <br /> 一个vector类似于一个动态的一维数组。 <br /> vector a; //声明一个元素为int类型的vector a <br />原创 2010-12-20 00:34:00 · 475 阅读 · 0 评论 -
map和set(关于iterator失效的问题)
STL map和set的使用虽不复杂,但也有一些不易理解的地方,如: 为何map和set的插入删除效率比用其他序列容器高? 为何每次insert之后,以前保存的iterator不会失效? 为何map和set不能像vector一样有个reserve函数来预分配数据? 当数据元素增多时(10000到20000个比较),map和set的插入和搜索速度变化如何?或许有得人能回答出来大概原因,但要彻底明白,还需要了解STL的底层数据结构。C++转载 2011-01-05 00:02:00 · 1346 阅读 · 0 评论 -
Set C++标准库
简介 一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。 在所有构造方法以及 add、equals 和 hashCode 方法的协定上,Set 接口还加入了其他规定,这些规定超出了从 Collection 接口所继承的内容。出于方便考虑,它还包括了其他继承方法的声明(这些声明的规范已经专门针对 Set 接口进行了修改,但是没有包转载 2011-01-06 23:35:00 · 4570 阅读 · 1 评论 -
vector list deque
vector:向量容器,使用线性存储结构,可以像数组一样随机(下标)访问元素,还可以在尾部插入元素(用push_back()函数)。特点:访问元素速度快,但插入、删除操作速度慢;list:双向链表容器,数据元素是通过链表指针串连成逻辑意义上的线性表,但在物理内存中数据可以是不连续的。特点:对链表的任一位置的元素进行插入、删除和查找操作都是极快速的,但由于通过指针串连而成(这里的指针也占用了内存空间),不能通过下标访问元素,因此list容器访问元素的速度比vector慢;deque:双端队转载 2011-01-09 09:21:00 · 747 阅读 · 0 评论 -
iterator与const_iterator
所有的标准库容器都定义了相应的迭代器类型。迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素。1.iterator,const_iterator作用:遍历容器内的元素,并访问这些元素的值。iterator可以改元素值,但const_iterator不可改。跟C的指针有点像(容器均可以++iter,而vector还可以iter-n, iter+n,n为一整型,iter1-iter2:结果是difference_type类型,表两元素的距离.)2.const_i转载 2011-01-14 00:24:00 · 547 阅读 · 0 评论 -
《高质量C++编程指南》即C++编程规范
读这本书,感觉非常有用.只是有些公用的规则就不一一列举,只记下自己以前不是那么清楚地规则.原创 2010-11-20 22:11:00 · 750 阅读 · 0 评论 -
函数中变量的生存期和作用域
<br />C++中变量生存期与VB中大不相同,C++中非静态局部变量的生存周期仅限于其声明所在的块(即程序中对应的大括弧)中,在退出块时便会释放掉内存。<br />例:<br />class destruct<br />{<br />public:<br /> int mem;<br /> destruct()<br /> {<br /> mem = 0;<br /> }<br /><br /> ~destruct()<br原创 2011-01-26 23:35:00 · 1048 阅读 · 0 评论 -
数组指针和数组引用的区别(是否能够限定数组大小、数组降价)
<br />template<class T><br />void func1(T &, T &) <br />{<br />}<br />template<class TT><br />void func2(TT, TT) <br />{<br />}<br />int main()<br />{<br /> int a[10], b[10], c[20];<br /><br /> func1(a, b); //OK, 数组引用<br />转载 2011-01-27 00:00:00 · 1378 阅读 · 0 评论 -
对引用和指针使用以及函数返回引用和指针类型的理解
<br />#include "stdafx.h"<br />#include <iostream><br />using namespace std;<br />int globalJ =999;<br /> <br />//返回值<br />int test1()<br />{<br /> int j =1;<br /> cout<<"in test1(),[return value] the varaible j's address :"<<&j<<e转载 2011-01-26 23:32:00 · 807 阅读 · 0 评论 -
钩子函数
WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一。利用它们,您可以捕捉您自己进程或其它进程发生的事件。通过“钩挂”,您可以给 WINDOWS一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,当每次发生您感兴趣的事件时,WINDOWS都将调用该函数。 一共有两种类型的钩子:局部的和远程的。 局部钩子 仅钩挂您自己进程的事件。 远程钩子 还可以将钩挂其它进程发生的事件。转载 2010-11-28 11:07:00 · 489 阅读 · 0 评论 -
堆与栈
<br />堆与栈比较<br />1.管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。<br />2.空间大小:一般来讲在32位系统下,堆内存可以达到4G的空间,从这个角度来看堆内存几乎是没有什么限制的。但是对于栈来讲,一般都是有一定的空间大小的,例如,在VC6下面,默认的栈空间大小是1M(好像是,记不清楚了)。当然,我们可以修改: <br /> 打开工程,依次操作菜单如下:Project->Setting->转载 2010-09-08 23:26:00 · 439 阅读 · 0 评论 -
#pragma once 与 #if !defined 分开了
#if !defined(AFX_PAGEPERIODTAG_H__58CA60B2_438A_11D2_A4E9_00A02474CBE5__INCLUDED_)#define AFX_PAGEPERIODTAG_H__58CA60B2_438A_11D2_A4E9_00A02474CBE5__INCLUDED_#if _MSC_VER >= 1000#pragma once#endif // _MSC_VER >= 1000原创 2010-08-05 14:39:00 · 953 阅读 · 0 评论 -
C++中头文件包含问题
<br /> 在一些大的工程中,可能会包含几十个基础类,免不了之间会互相引用 ( 不满足继承关系,而是组合关系 ) 。也就是需要互相声明。好了,这时候会带来一些混乱。如果处理得不好,会搞得一团糟,根据我的经验,简单谈谈自已的处理办法:<br />编码时,我们一般会尽量避免 include 头文件,而是采用声明 class XXX 。 但有时候还是必须用 Include 头文件,那么,两者的划分在于什么呢?<br />应该是很明确的,但书上好像都少有提及。<br />首先:<br />转载 2010-08-10 23:51:00 · 865 阅读 · 0 评论 -
关于VC2008编译出现错误“error C2664: ” 的处理方法:
在VC2008中编程如下: TempValue.Format("%d",m_CH1_Value); //TempValue为Cstring类型,m_CH1_Value为Int类型编译之后出现1>e:/project/cplus/control/control/controldlg.cpp(200) :error C2664: “void ATL::CStringT::Format(constwchar_t *,...)”: 不能将参数1 从“const ch转载 2010-08-12 23:35:00 · 3641 阅读 · 0 评论