随笔分类 -  visual c++

摘要:只要记住一点就能很好区分char *和char []:char *定义的是一个指向字符串的指针(注意:C语言中没有对应字符串的内置类型或者类类型),而char []就是C语言中的用来定义字符数组(注意:字符数组是不同于字符串,如果字符数组以'\0'结尾,那么可以视为字符串)。char a[]在运行时赋值,值会从静态区赋值到函数的栈中,对它进行修改不会产生任何问题。char *a在编译时就确定了,a指向静态区中的值,没有赋值到函数栈中, 因此对指针的内容进行修改会产生错误。和许多文章一样, 还是先来了解一下 一个由 C / C++ 编译的程序占用的内存分为以下几个部分:1、栈区( 阅读全文
posted @ 2013-03-22 09:11 郑文亮 阅读(2447) 评论(0) 推荐(0) 编辑
摘要:SW_SHOW表示以当前大小激活运行后的程序窗口并显示它。 第二个参数是控制程序主窗口的显示方式 第二个参数可能的取值为 : SW_HIDE //程序启动后隐藏主窗口 SW_MAXIMIZE //最大化运行 SW_MINIMIZE //最小化运行 SW_RESTORE //将最大化或最小化的窗口恢复正常 SW_SHOW //以当前位置和大小显示主窗口 SW_SHOWMAXIMIZED //激活窗口并以最大化运行 SW_SHOWMINIMIZED //激活窗口并以最小化运行 SW_SHOWMINNOACTIVE //最小化运行,但不激活 SW_SHOWNOACTIVATE //以上一次的窗口大小 阅读全文
posted @ 2012-12-08 13:56 郑文亮 阅读(15619) 评论(0) 推荐(0) 编辑
摘要:如何使用VC来检测系统上的.NetFrameWork版本呢,原理见我前面刚刚写过,不懂的可以去看一下,下面直接贴代码了,百度呀,为什么没有贴代码的功能呢,哎直接贴真恶心呀,那就恶心一下吧。#include “stdio.h”#include “windows.h”#include “tchar.h”#include “strsafe.h”#include “stdafx.h”// 为避免机器编译时候出现:SDK中某些值没有被定义的情况,先定义他们。#ifndef SM_TABLETPC#define SM_TABLETPC 86#endif#ifndef SM_MEDIACENTER#defi 阅读全文
posted @ 2012-12-08 09:11 郑文亮 阅读(1328) 评论(0) 推荐(0) 编辑
摘要:ATL是ActiveXTemplateLibrary的缩写,它是一套C++模板库。使用ATL能够快速地开发出高效、简洁的代码,同时对COM组件的开发提供最大限度的代码自动生成以及可视化支持。为了方便使用,从MicrosoftVisualC++5.0版本开始,Microsoft把ATL集成到VisualC++开发环境中。1998年9月推出的VisualStudio6.0集成了ATL3.0版本。在ATL产生以前,开发COM组件的方法主要有两种:一是使用COMSDK直接开发COM组件,另一种方式是通过MFC提供的COM支持来实现。直接使用COMSDK开发COM组件是最基本也是最灵活的方式。通过使用M 阅读全文
posted @ 2012-11-29 14:04 郑文亮 阅读(8347) 评论(0) 推荐(2) 编辑
摘要:GUID guid; CString szGUID; if (S_OK == ::CoCreateGuid(&guid)) { szGUID.Format( "{%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X} " , guid.Data1 , guid.Data2 , guid.Data3 , guid.Data4[0], guid.Data4[1] , guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5] , guid.Data4[6], guid. 阅读全文
posted @ 2012-11-27 17:19 郑文亮 阅读(3928) 评论(0) 推荐(0) 编辑
摘要:ListBox控件的使用 ListBox窗户用来列出一系列的文本,每条则本占一行。创建一个列表窗户可使用成员函数: BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff ); 其中dwStyle将指明该窗户的风格,除了子窗户常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。 LBS_MULTIPLESEL 指明列表框可以同时选择多行 LBS_EXTENDEDSEL 可以路程经过过程按下. 阅读全文
posted @ 2012-11-27 17:00 郑文亮 阅读(6294) 评论(0) 推荐(0) 编辑
摘要:一. 在 MFC 中检测内存泄漏 假如是用MFC的程序的话,很简单。默认的就有内存泄露检测的功能。 我们用VS2005生成了一个MFC的对话框的程序,发现他可以自动的检测内存泄露.不用我们做任何特殊的操作. 仔细观察,发现在每个CPP文件中,都有下面的代码: #ifdef _DEBUG #define new DEBUG_NEW #endif DEBUG_NEW 这个宏定义在afx.h文件中,就是它帮助我们定位内存泄漏。 在含有以上代码的cpp文件中分配内存后假如没有删除,那么停止程序的时候,VisualStudio的Output窗口就会显示如下的信息了: Detected m... 阅读全文
posted @ 2012-11-27 16:08 郑文亮 阅读(3132) 评论(0) 推荐(1) 编辑
摘要:什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。为什么要引入缓冲区我们为什么要引入缓冲区呢?比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印 阅读全文
posted @ 2012-11-27 13:35 郑文亮 阅读(524) 评论(0) 推荐(0) 编辑
摘要:在VC中,CSTRING类的用法形式多样,丰富多彩.但有时与传统数据类型之间的转换成为了很多人的难题.下面我来简单介绍它们之间的关系.1 如何实现cstring与char*之间的转换: CString m_cstr="abc"; char* m_char="def";char*lp=m_cstr.GetBuffer(m_cstr.GetLength());m_cstr.ReleaseBuffer(); //相反的char*转换成cstringm_cstr.Format("%s",lp); //lp为数组指针第二种:强制类型转换为LPC 阅读全文
posted @ 2012-11-27 13:32 郑文亮 阅读(10707) 评论(0) 推荐(0) 编辑
摘要:在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。在实际使用过程种有什么区别呢?主要是符号位,但是在普通的赋值,读写文件和网络字节流都没什么区别,反正就是一个字节,不管最高位是什么,最终的读取结果都一样,只是你怎么理解最高 阅读全文
posted @ 2012-11-27 13:25 郑文亮 阅读(1414) 评论(2) 推荐(0) 编辑
摘要:最近在学习一些SOCKET通讯协议设计的知识,涉及到了一些协议的设计,需要打包和解包,所以把一些比较基本的知识搜集了下来.暂时把协议结构定义得比较简单,也就是 CMD(命令类型8位)+序号(整形16位)+接收人长度(整形16位)+消息内容(每个包只接收1024位消息内容,多余的需要分割);下面是需要用到的一些方法.//整数到字节数组的转换 public byte[] intToByte(int intValue) { byte[] result = new byte[4]; result[0] = (byte) ( (intValue & 0xFF000000) >> 24 阅读全文
posted @ 2012-11-27 13:13 郑文亮 阅读(3483) 评论(0) 推荐(0) 编辑
摘要:因刚接触VC++的开发,需要对C++一些原理性的东西进行掌握。特别是对源文件和头文件的概念,需要深入对它了解:转载于:.h和.cpp文件的区别 关于头文件和源文件的分别首先,我们可以将所有东西都放在一个.cpp文件内.然后编译器就将这个.cpp编译成.obj,obj是什么东西?就是编译单元了.一个程序,可以由一个编译单元组成,也可以有多个编译单元组成. 如果你不想让你的源代码变得很难阅读的话,就请使用多个编译单元吧.(一个函数不能放到两个编译单元里面,但两个以上就可以分别放在一个单元,也就是cpp里面) 那么就是一个.cpp对应一个.obj,然后将所有的obj链接起来(通过一个叫链接器的程序. 阅读全文
posted @ 2012-11-26 16:11 郑文亮 阅读(473) 评论(0) 推荐(0) 编辑
摘要:为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 #endif 方式二: #pragma once ... ... // 一些声明语句 #ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导 阅读全文
posted @ 2012-11-26 14:31 郑文亮 阅读(249) 评论(0) 推荐(0) 编辑
摘要:在VS2005里开发的VC++程序在编译的时候,微软默认会加入自己的.Net Framework (方便推广自家产品),让你的VC++程序依赖它,这就导致程序编译后,无法跟往常一样直接打包,在别的机器就能正常运行。如果加入了.Net Framework ,安装包就会非常大。以下方法很好的解决了这个问题,通过以下两种方法可以用VS2005将VC++程序编译为不需要依赖.Net Framework就可以直接运行的程序了。方法一:1、右键项目-属性2、配置属性-C/C++-代码生成3、运行时库-选择/mt或者/mtd即 Multi-threaded(/MT) 或Multi-threadedDebug 阅读全文
posted @ 2012-11-26 13:29 郑文亮 阅读(1000) 评论(1) 推荐(0) 编辑
摘要:做移动开发快一年了,有幸接触了WM、Symbian、Android、iPhone等多个平台的开发。往往一个软件需要实现多个平台的版本,对于不同平台进行重新编码是一件很费劲的事情,其实我们可以通过代码共用技术,实现对一些代码的重用。 这一技术的应用,可以带来不少的好处:1.代码重用:节约开发和维护的时间2.核心代码的保护:将核心代码编译成库,只将库而不是源代码提供给上层开发人员使用。3.。。。。。。 本文将实现一个支持这几个平台的天气信息查询软件,软件采用C语言去实现调用WebService接口获取天气信息的功能,并将其编译成各种平台能够调用的库,而UI则采用各个平台各自的语言去实现,最... 阅读全文
posted @ 2012-11-26 11:21 郑文亮 阅读(511) 评论(1) 推荐(2) 编辑
摘要:CString urlEncode(CString s){int len = s.GetLength();char *out = new char[len*9+1];memset(out , 0 , len*9+1);int i , j;int ch = 0 ;static char myhex[0xFF+1][4]; //add by zhouzd 2008-10-06static bool isinital = false;if ( !isinital ){for ( i = 0 ; i <= 0xFF ; ++i ){myhex[i][0] = '%';sprint 阅读全文
posted @ 2012-11-23 18:27 郑文亮 阅读(2465) 评论(0) 推荐(0) 编辑
摘要:// pb.cpp : Defines the initialization routines for the DLL.//#include "stdafx.h"#include <string.h>#include "pb.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif////Note!////If this DLL is dynamically linked against the MFC//DLLs 阅读全文
posted @ 2012-11-23 16:29 郑文亮 阅读(402) 评论(0) 推荐(0) 编辑
摘要:最近在C++编程中经常遇到需要多字节字符与宽字节字符相互转换的问题,一直自己贴那几句代码。觉得麻烦,于是就自己写了一个类来封装wchar_t与char类型间的转换,其他的,诸如:CString\ LPWSTR\TCHAR CHAR\LPSTR之间也是一样用#include <iostream> using namespace std; class CUser { public: CUser(); virtual~ CUser(); char* WcharToChar(wchar_t* wc);//宽字节转单字节 wchar_t* CharToWchar(char* c); //单字 阅读全文
posted @ 2012-11-23 13:32 郑文亮 阅读(20756) 评论(1) 推荐(1) 编辑
摘要:C语言原本是在英文环境中设计的,主要的字符集是7位的ASCII码,8位的byte(字节)是最常见的字符编码单位。但是国际化软件必须能够表示不同的字符,而这些字符数量庞大,无法使用一个字节编码。 C95标准化了两种表示大型字符集的方法:宽字符(wide character,该字符集内每个字符使用相同的位长)以及多字节字符(multibyte character,每个字符可以是一到多个字节不等,而某个字节序列的字符值由字符串或流(stream)所在的环境背景决定)。 自从1994年的增补之后,C语言不只提供char类型,还提供wchar_t类型(宽字符),此类型定义在stddef.h 头文件... 阅读全文
posted @ 2012-11-23 13:22 郑文亮 阅读(4159) 评论(0) 推荐(0) 编辑
摘要:作者:朱金灿来源:http://blog.csdn.net/clever101 以前看《Window核心编程》,感觉多字节和宽字节之间还比较麻烦的,至少MultiByteToWideChar函数和WideCharToMultiByte函数有足够多的参数的意义让我们去理解。近日接触了ATL的一个很好的字符串的转换宏:A2W和W2A。用法很简单,A2W的用法:[cpp] view plaincopyprint?#include<atlconv.h> DoSomething(LPWSTRstr);//函数声明 USES_CONVERSION;DoSomething(A2W("S 阅读全文
posted @ 2012-11-23 11:34 郑文亮 阅读(466) 评论(0) 推荐(0) 编辑