2012年6月13日
摘要: 引言毫无疑问,你肯定见过像TCHAR,std::string,BSTR等等这类字符串类型.也包括一些以_tcs开头的奇怪的宏。也许你正盯着屏幕"哇哇"的发愁,然而阅读完本文情况将会改观。这篇指南概述了引入各种类型字符串的目的,展示了它们的一些简单用法,同时描述了在必要的时候在它们之间如何进行转换。在第一部分,将会涉及三种类型的字符编码。理解编码方案的工作原理对你至关重要。即使你现在已经知道字符串是一个字符数组,还是看看这部分内容。一旦你阅读了这些内容,你就清楚了这么多字符串类之间的联系。在第二部分,将描述字符串类本身,包括什么时候使用哪种类以及如何在他们之间进行转换。基本字 阅读全文
posted @ 2012-06-13 10:46 莫水千流 阅读(631) 评论(0) 推荐(0)
摘要: Ansi转Unicode介绍2种方法voidCConvertDlg::OnBnClickedButtonAnsiToUnicode(){//ansitounicodechar*szAnsi="abcd1234你我他";//预转换,得到所需空间的大小intwcsLen=::MultiByteToWideChar(CP_ACP,NULL,szAnsi,strlen(szAnsi),NULL,0);//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间wchar_t*wszString=newwchar_t[wc 阅读全文
posted @ 2012-06-13 09:14 莫水千流 阅读(3126) 评论(0) 推荐(0)
  2012年6月11日
摘要: FILE* fp; if((fp=_wfopen(L"turk2.txt", L"r,ccs=UNICODE"))!=NULL) { fseek(fp,0,SEEK_END); long len = ftell(fp); fseek(fp,0,SEEK_SET); wchar_t *temp = new wchar_t[len]; memset(temp,0,len); fread(temp,sizeof(wchar_t),len,fp); AfxMessageBox(temp); delete [] temp; fclose(fp); } 阅读全文
posted @ 2012-06-11 21:01 莫水千流 阅读(238) 评论(0) 推荐(0)
摘要: 选择目录对话框//选择目录按钮voidCDcPackerDlg::OnBnClickedDecgen(){charszPath[MAX_PATH];//存放选择的目录路径CStringstr;ZeroMemory(szPath,sizeof(szPath));BROWSEINFObi;bi.hwndOwner=m_hWnd;bi.pidlRoot=NULL;bi.pszDisplayName=szPath;bi.lpszTitle="请选择需要打包的目录:";bi.ulFlags=0;bi.lpfn=NULL;bi.lParam=0;bi.iImage=0;//弹出选择目录 阅读全文
posted @ 2012-06-11 20:27 莫水千流 阅读(1635) 评论(0) 推荐(0)
  2012年6月7日
摘要: 1 MFC异常 MFC 较好地将异常封装到CException类及其派生类中,自成体系,下表给出了MFC 提供的预定义异常:异常类 含义 CMemoryException内存不足CFileException文件异常CArchiveException存档/序列化异常CNotSupportedException响应对不支持服务的请求CResourceExceptionWindows 资源分配异常CDaoException数据库异常(DAO 类)CDBException数据库异常(ODBC 类)COleExceptionOLE 异常COleDispatchException调度(自动化)异常CUse 阅读全文
posted @ 2012-06-07 23:22 莫水千流 阅读(1124) 评论(0) 推荐(0)
摘要: 在 C++中,数组永远不会按值传递,它是传递第一个元素,准确地说是第 0个 的指针。例如,如下声明 :void putValues( int[ 10 ] ); 被编译器视为 void putValues( int* ); 数组的长度与参数声明无关,因此,下列三个声明是等价的: // 三个等价的 putValues()声明 void putValues( int* ); void putValues( int[] ); void putValues( int[ 10 ] ); 因为数组被传递为指针 所以这对程序员有两个含义:1. 在被调函数内对参数数组的改变将被应用到数组实参上而不是本地拷贝上, 阅读全文
posted @ 2012-06-07 10:12 莫水千流 阅读(379) 评论(0) 推荐(0)
  2012年5月31日
摘要: 公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。2. 私有继承(private)私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。3. 保护继承(protected)保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。下面列出三种不同的继 阅读全文
posted @ 2012-05-31 17:00 莫水千流 阅读(635) 评论(0) 推荐(0)
  2012年5月30日
摘要: GDB 是 linux 系统上常用的调试工具,本文介绍了使用 GDB 调试多进程程序的几种方法,并对各种方法进行比较。GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强大。对于较为复杂的系统,比如多进程系统,如何使用 GDB 调试呢?考虑下面这个三进程系统:进程 Proc2 是 Proc1 的子进程,Proc3 又是 Proc2 的子进程。如何使用 GDB 调试 proc2 或者 proc3 呢?实际上,GDB 没有对多进程程序调试提供直接支持。例如,使用GDB调试某个进程,如果该进程fork了子进程,GDB会继续调试该进程,子进程会不受干扰地运行下去。如果你事先在子进程代 阅读全文
posted @ 2012-05-30 09:37 莫水千流 阅读(445) 评论(0) 推荐(0)
  2012年5月29日
摘要: 在Unix系统下,应用程序崩溃,一般会产生core文件,如何根据core文件查找问题的所在,并做相应的分析和调试,是非常重要的。什么是Core Dump?Core的意思是内存, Dump的意思是扔出来, 堆出来.开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考.core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个c 阅读全文
posted @ 2012-05-29 14:10 莫水千流 阅读(373) 评论(0) 推荐(0)
  2012年5月23日
摘要: 让我们开门见山的讨论本话题:可以继承的函数可以分为两种:虚拟的和非虚拟的。然而,重定义一个非虚拟的派生函数始终是一个错误(参见第36条),因此,我们可以放心地将此处的讨论范围缩小至以下情况:继承一个含有默认参数值的虚函数。此情况下,本条目的证明问题则显得十分了然:虚函数是动态绑定的,而默认参数值是静态绑定的。你说啥?静态绑定于动态绑定之间的区别已经让你头晕目眩了?(静态绑定又称早期绑定,动态绑定又称晚期绑定,这是官方说法。)我们只好复习一下了。一个对象的静态类型就是你在对其进行声明时赋予它的类型。请考虑下面的类层次结构:Code highlighting produced by Actipro 阅读全文
posted @ 2012-05-23 09:18 莫水千流 阅读(1387) 评论(0) 推荐(2)