11 2012 档案

摘要:从网络获取图片,数据为InputStream流对象,然后调用BitmapFactory的decodeStream()方法解码获取图片。代码如下:private Bitmap getUrlBitmap(String url){Bitmap bm;try{URL imageUrl=new URL(url);HttpURLConnection conn=(HttpURLConnection)imageUrl.openConnection();conn.connect();InputStream is=conn.getInputStream();//byte[] bt=getBytes(is); // 阅读全文
posted @ 2012-11-30 17:47 郑文亮 阅读(744) 评论(1) 推荐(0) 编辑
摘要:Android自适应不同分辨率或不同屏幕大小的layout布局(横屏|竖屏)2011-08-09 0:36一:不同的layoutAndroid手机屏幕大小不一,有480x320, 640x360, 800x480.怎样才能让App自动适应不同的屏幕呢? 其实很简单,只需要在res目录下创建不同的layout文件夹,比如layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。二:hdpi、mdpi、ldpi在之前的版本中,只有一个drawable,而2.1版本中有drawable 阅读全文
posted @ 2012-11-30 10:23 郑文亮 阅读(2538) 评论(1) 推荐(2) 编辑
摘要:请看下面这条语句:var ns6=document.getElementById && !document.all为什么document.getElementById的后面没有括号和参数?这条语句什么意思??首先说,不是语法错误,如果谁认为是语法错误,那说明对javascript的本质根本就不了解。javascript 的只是基本上可以分成 core javascript 和 client side javascript ,而document 则属于浏览器端(client side)的一个语言原有对象,而 getElementById 和all 这两个方法是document的原 阅读全文
posted @ 2012-11-29 15:00 郑文亮 阅读(719) 评论(6) 推荐(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 郑文亮 阅读(8373) 评论(0) 推荐(2) 编辑
摘要:今天有朋友在52css.com的留言板提出一个问题:为什么text-overflow:ellipsis的时候没有任何效果呀?text-overflow是一个比较特殊的属性,在CSS手册中,这个属性是这样定义的: 语法: text-overflow:clip|ellipsis 参数: clip: 不显示省略标记(...),而是简单的裁切 (clip这个参数是不常用的!) ellipsis: 当对象内文本溢出时显示省略标记(...) 说明:设置或检索是否使用一个省略标记(...)标示对象内文本的溢出。 请您注意,text-overflow:ellipsis属性在FF中是没有效果的。... 阅读全文
posted @ 2012-11-28 11:08 郑文亮 阅读(1141) 评论(0) 推荐(0) 编辑
摘要:1.嵌套元素中使用负边界举例:<div class="main"><div class="content">子元素,注意自元素中的内容,这将有助于理解负边界的含义</div></div>.main{padding:50px 0 0 100px;width:350px;height:150px;background:#999999;}.content{margin:-100px 0 0 100px;width:100px;height:100px;background:#cccccc;}实现效果是:子元素的上 阅读全文
posted @ 2012-11-28 10:56 郑文亮 阅读(1854) 评论(0) 推荐(0) 编辑
摘要: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 郑文亮 阅读(3930) 评论(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 郑文亮 阅读(6364) 评论(0) 推荐(0) 编辑
摘要:我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等方式,重写我们自己的对话框。当然,这也是不失为一个不错的解决方式,但是一般的情况却是这样,我们重写的对话框,也许只在一个特定的地方会用到,为了这一次的使用,而去创建一个新类,往往有点杀鸡用牛刀的感觉,甚至会对我们的程序增加不必要的复杂性,对于这种情形的对话框有没有更优雅的解决方案呢? 幸运的是,android提供了这种问题的解决方案,刚开始接触android的时候,我在做一个自定义对话框的时候,. 阅读全文
posted @ 2012-11-27 16:34 郑文亮 阅读(822) 评论(0) 推荐(0) 编辑
摘要:转载注明以上文字第一:出现内存泄露后如图1所示,点击view工具的第三个视图,显示左侧栏,即如图2所示:(图一)第二:双击泄露的黑色的表示泄露的代码,出现如图三所示(图二)第三:红色区域即是表示有泄露的object,添加代码: CFRelease(email); [personNamerelease];后,解决了泄露问题(图三)第二种方法:使用analyze,会自动分析出可能存在的内存泄露的地方,或者错误引用的地方,如图所示(图四)将出现问题的代码换成被注释掉的代码即可。 阅读全文
posted @ 2012-11-27 16:20 郑文亮 阅读(220) 评论(1) 推荐(0) 编辑
摘要:在project-setting中找到 “Run Static Analyzer” 键,然后把值修改为“YES”.这样在编码的时候,xcode就可以自动为我们检查内存泄露了. 阅读全文
posted @ 2012-11-27 16:18 郑文亮 阅读(1009) 评论(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 郑文亮 阅读(3133) 评论(0) 推荐(1) 编辑
摘要:沿金马路——玉清东街——光电东路——第一孵化器(三楼恩源信息,20分钟;参观九楼中动传媒,20分钟;参观公共技术平台,10分钟)——光电西路——玉清东街——东方路——北宫东街——华光照排(停车参观,15分钟)————北宫东街——潍县中路——健康东街——软件园(路过)——健康东街——山东呼叫中心产业基地(一楼听取PPT情况介绍,参观四楼呼叫职场,15分钟)——健康东街——第二孵化器(参观高新成果展,15分钟;参观十二楼乐维特、天创传媒、英豪网络,30分钟;参观十四楼尚德软件,10分钟) 阅读全文
posted @ 2012-11-27 15:03 郑文亮 阅读(1386) 评论(0) 推荐(0) 编辑
摘要:什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。为什么要引入缓冲区我们为什么要引入缓冲区呢?比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印 阅读全文
posted @ 2012-11-27 13:35 郑文亮 阅读(534) 评论(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 郑文亮 阅读(10726) 评论(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 郑文亮 阅读(3485) 评论(0) 推荐(0) 编辑
摘要:上网学了好多方法,关于Android的Activity如何退出。好多方法都不行啦,试了各种方法,下面这种方法就是我最喜欢的,简单又容易懂。使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activity,并且容易理解、易于操作,非常不错!MyApplication类(储存每一个Activity,并实现关闭所有Activity的操作Java代码 publicclassMyApplicationextendsApplication{ privateList<Activity>act 阅读全文
posted @ 2012-11-27 09:17 郑文亮 阅读(1916) 评论(3) 推荐(1) 编辑
摘要:因刚接触VC++的开发,需要对C++一些原理性的东西进行掌握。特别是对源文件和头文件的概念,需要深入对它了解:转载于:.h和.cpp文件的区别 关于头文件和源文件的分别首先,我们可以将所有东西都放在一个.cpp文件内.然后编译器就将这个.cpp编译成.obj,obj是什么东西?就是编译单元了.一个程序,可以由一个编译单元组成,也可以有多个编译单元组成. 如果你不想让你的源代码变得很难阅读的话,就请使用多个编译单元吧.(一个函数不能放到两个编译单元里面,但两个以上就可以分别放在一个单元,也就是cpp里面) 那么就是一个.cpp对应一个.obj,然后将所有的obj链接起来(通过一个叫链接器的程序. 阅读全文
posted @ 2012-11-26 16:11 郑文亮 阅读(476) 评论(0) 推荐(0) 编辑
摘要:为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 #endif 方式二: #pragma once ... ... // 一些声明语句 #ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导 阅读全文
posted @ 2012-11-26 14:31 郑文亮 阅读(251) 评论(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 郑文亮 阅读(1005) 评论(1) 推荐(0) 编辑
摘要:做移动开发快一年了,有幸接触了WM、Symbian、Android、iPhone等多个平台的开发。往往一个软件需要实现多个平台的版本,对于不同平台进行重新编码是一件很费劲的事情,其实我们可以通过代码共用技术,实现对一些代码的重用。 这一技术的应用,可以带来不少的好处:1.代码重用:节约开发和维护的时间2.核心代码的保护:将核心代码编译成库,只将库而不是源代码提供给上层开发人员使用。3.。。。。。。 本文将实现一个支持这几个平台的天气信息查询软件,软件采用C语言去实现调用WebService接口获取天气信息的功能,并将其编译成各种平台能够调用的库,而UI则采用各个平台各自的语言去实现,最... 阅读全文
posted @ 2012-11-26 11:21 郑文亮 阅读(512) 评论(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 郑文亮 阅读(2468) 评论(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 郑文亮 阅读(403) 评论(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 郑文亮 阅读(20761) 评论(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 郑文亮 阅读(4162) 评论(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) 编辑
摘要:</head><form method="post" action="the URL of POST" ><p> <textarea cols="80" rows="20"></textarea></p><p> <input type="submit" value="Submit"><input type="reset" value="Reset 阅读全文
posted @ 2012-11-22 21:44 郑文亮 阅读(4021) 评论(0) 推荐(0) 编辑
摘要:一.CFile类操作文件默认的是Binary模式,CStdioFile类操作文件默认的是Text模式。在Binary模式下我们必须输入'\r\n',才能起到回车换行的效果,'\r'只是回车(回到当前行的第一列),'\n'只是换行(到达下一行的当前列)。而在Text模式下'\r'的工作是自动完成的,当我们写一个'\n'的时候,系统会自动帮我们在其前面加上一个'\r',然后保存到文件里。另外,CFile::typeText只能在CFile的子类中使用,CFile自身的Read函数不能使用CFile::t 阅读全文
posted @ 2012-11-22 21:21 郑文亮 阅读(542) 评论(0) 推荐(0) 编辑
摘要:有三分代码strCoding.hstrCoding.cpptest.cpp*******************************************************************************************************************************[cpp] view plaincopyprint?//这是个类strCoding(strCoding.h文件) #pragmaonce #include<iostream> #include<string> #include<windows 阅读全文
posted @ 2012-11-22 21:17 郑文亮 阅读(1261) 评论(0) 推荐(0) 编辑
摘要:参考网址:http://www.398588.com/Article/T9/78.aspx读取网页的内容可以类比本地的文件一下,代码如下:#include <afxinet.h> CStringurl;GetDlgItemText(IDC_EDIT1,url);CInternetSessionSess;CHttpFile*cFile=(CHttpFile*)Sess.OpenURL(url,1,INTERNET_FLAG_TRANSFER_ASCII||INTERNET_FLAG_RELOAD,NULL,0);DWORDdwStatusCode;cFile->QueryInf 阅读全文
posted @ 2012-11-22 21:14 郑文亮 阅读(1593) 评论(0) 推荐(0) 编辑
摘要:assert函数名: assert功 能: 测试一个条件并可能使程序终止用 法: void assert(int test);程序例:#include#include#includestruct ITEM {int key;int value;};/* add item to list, make sure list is not null */void additem(struct ITEM *itemptr) {assert(itemptr != NULL);/* add item to list */}int main(void){additem(NULL);return 0;}asse 阅读全文
posted @ 2012-11-22 21:02 郑文亮 阅读(15016) 评论(0) 推荐(0) 编辑
摘要:版权所有 2009-2012 武汉命运科技有限公司保留所有权利官方网站:http://www.ncmem.com/产品首页:http://www.ncmem.com/webplug/http-uploader3/index.aspx在线演示:http://www.ncmem.com/products/http-uploader3/demo/index.html产品介绍:http://www.cnblogs.com/xproer/archive/2012/02/17/2355440.html开发文档-ASP:http://www.cnblogs.com/xproer/archive/2012/0 阅读全文
posted @ 2012-11-22 17:23 郑文亮 阅读(3490) 评论(0) 推荐(0) 编辑
摘要:一:安装一个扩展MediaWrap 0.1.7.3mediawrap是一个很小的Firefox扩展。它能够将ActiveX控件方式的网页内嵌媒体转换成Firefox能够支持的Plugin方式,从而使Firefox也能够象IE一样正常播放Wmplayer、Rmplayer、QtPlayer和FlashPlayer格式的媒体文件。当然,你的系统中首先要安装过相应的播放软件及解码器,比如,Windows Media Player和RealPlayer等。很多网站使用了ActiveX控件方式来播放网页内嵌媒体,但是Firefox浏览器本身并不支持ActiveX控件。如果你经常在这样的网站观看视频或者听 阅读全文
posted @ 2012-11-22 17:10 郑文亮 阅读(25966) 评论(1) 推荐(0) 编辑
摘要:之前在一个B/S项目中遇到一个需求,就是客户需要在页面上对报表的布局以及显示内容,进行自定义。最后决定使用activex技术来实现。众所周知,activex是微软搞得,因此只有ie内核的浏览器才能支持。像firefox(火狐)、Chrome、Apple Safari等非ie内核浏览器都不支持activex控件,这样就大大加大了系统使用的局限性。因此考虑是不是可以让非ie内核浏览器也能支持activex控件,目前火狐等浏览器也有类似于activex控件的技术,那就是插件。所以最终决定以插件来作为连接activex的纽带,使非ie内核浏览器也可以支持activex控件。确定了开发内容后,接下来就是 阅读全文
posted @ 2012-11-22 17:03 郑文亮 阅读(1763) 评论(2) 推荐(0) 编辑
摘要:序号软件名称软件产品登记证书号1华光排版系统软件V1.0鲁DGY-2005-01902华光汇闻采编管理系统软件V1.0鲁DGY-2005-01913华光RIP2005软件V1.0鲁DGY-2005-01924华光佳成拼版软件V1.0鲁DGY-2006-02825华光字源字库V1.0鲁DGY-2006-02136华光超越广告管理系统软件V1.0鲁DGY-2006-02147华光印科油墨预置系统软件V2.0鲁DGY-2006-02838华光易现数字报刊系统软件V1.0鲁DGY-2006-02809华光中枢远程信息管理系统软件V1.0鲁DGY-2006-028410华光电子公文处理系统软件V1.0鲁 阅读全文
posted @ 2012-11-22 11:10 郑文亮 阅读(346) 评论(0) 推荐(0) 编辑
摘要:要实现动态加载JS脚本有4种方法:1、直接document.write<script language="javascript"> document.write("<script src='test.js'><\/script>");</script>2、动态改变已有script的src属性<script src='' id="s1"></script><script language="javascript&quo 阅读全文
posted @ 2012-11-22 09:54 郑文亮 阅读(487) 评论(0) 推荐(0) 编辑
摘要:创建一个弹出DIV窗口可能是现在网站/网页制作中最常碰到的问题之一。传统的JavaScript弹窗已经不适合目前网站的设计理念了,理由有二:首先,不友好——生硬的弹出对话框且伴随着“哐”的一声对用户体验是个很大的挑战;其次,兼容性不够强——有相当多的浏览器屏蔽了这种JS的Alert()方法。于是,一个良好用户体验的网站需要一种更合理的解决方案——使用很少的HTML代码,很少的CSS代码和几行的JavaScript代码来模拟浏览器默认的弹出窗口(即替换掉默认的Alert()界面和功能)。实现原理:首先,我们将弹出框中的内容放置在一个特殊的DIV层中,然后默认隐藏它(即初始不可见,使用CSS即可实 阅读全文
posted @ 2012-11-21 11:16 郑文亮 阅读(940) 评论(2) 推荐(0) 编辑
摘要:上次用VC写了个MFC环境下的post数据类,地址:/Html/diannaojishu/2009-10/4905858580.html这次将这个类进行扩展,可以post图片。但这两个post所使用的方法不一样。post数据,是直接在http协议头将Content-Type设为application/x-www-form-urlencoded,这样 服务器会将提交的数据,当作表单数据处理。发送的数据格式也为:userid=lilu&data=post图片类&name=天漏客。 而post图片则是自己构造http协议数据,将http协议头的Content-Type设为multip 阅读全文
posted @ 2012-11-16 11:25 郑文亮 阅读(980) 评论(1) 推荐(0) 编辑
摘要:一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。 C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。 请看下面的程序。 ?12345678910111213141516171819202122#include <iostream>; using namespace std; c 阅读全文
posted @ 2012-11-16 10:34 郑文亮 阅读(412) 评论(2) 推荐(0) 编辑
摘要:在C/C++中,指针和数组在很多地方可以互换使用,这使得我们产生一种错觉,感觉数组和指针两者是完全等价的,事实上数组和指针是有很大的区别的。1.两者在含义上的区别。 数组对应着一块内存区域,而指针是指向一块内存区域。其地址和容量在生命期里不会改变,只有数组的内容可以改变;而指针却不同,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。如:#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void){ char*s1=" 阅读全文
posted @ 2012-11-16 09:47 郑文亮 阅读(497) 评论(2) 推荐(0) 编辑
摘要:本示例效果如下:根据指定的文件夹路径如E:\\a\\b\\d向下遍历删除其下的子文件及子目录删除其本身向上遍历删除其空的父目录using System.IO;protected void Button1_Click(object sender, EventArgs e){ string dir = "E:\\a\\b\\d"; //string dir = "E:\\a"; string pdir = Directory.GetParent(dir).FullName; DeleteFolder(dir); DeletePEmptyFolder(pdir 阅读全文
posted @ 2012-11-14 14:44 郑文亮 阅读(499) 评论(0) 推荐(0) 编辑
摘要:今天检查自己用JQuery+AJAX+PHP做的网站后台登录检测,发现登陆成功后执行页面跳转函数这段JavaScript(JS)代码特效在IE和谷歌浏览器Chrome下都可以很好地执行,兼容性还不错。结果到了火狐(FireFox)浏览器下setTimeout这个JS内置函数不执行了,无效了,也没报错!打开FireBUG指望它能检测出JS的错误,结果没用...Javascript(JS)脚本代码在各浏览器下的兼容是一个很头疼的问题,经过一番调试和搜索,终于解决了setTimeout这个JS代码在火狐下失效不兼容不能运行和执行的错误。目前这个setTimeout可以很好地兼容IE6,7,8,9以及 阅读全文
posted @ 2012-11-14 13:41 郑文亮 阅读(1871) 评论(1) 推荐(0) 编辑
摘要:SWFUpload是一个非常不错的异步上传组件,但是在Chrome、Firefox等浏览器下使用的时候会有问题。问题如下:为了防止跳过上传页面直 接向“接受SWFUpload上传的一般处理程序”(假如是Upload.ashx)发送请求造成WebShell漏洞,我的系统中对于 Upload.ashx进行了权限控制,只有登录用户才能进行上传。在IE下没问题,但是在Chrome下运行报错“用户未登录”。经过搜索得知:因为SWFUpload是靠Flash进行上传的,Flash在IE下会把当前页面的Cookie发到Upload.ashx,但是Chrome、Firefox下则不会把当前页面的Cookie发 阅读全文
posted @ 2012-11-14 10:21 郑文亮 阅读(2410) 评论(0) 推荐(0) 编辑
摘要:NET生成缩略图,只需你给定要生成的图片途径,生成后寄存的服务器途径,生成方法,生成的尺度,还有生成后的图片类型,即可为你生成适宜的缩略图。 ASP.NET中生成缩略图,只需你给定要生成的图片途径,生成后寄存的服务器途径,生成方法,生成的尺度,还有生成后的图片类型,即可为你生成适宜的缩略图。先有必要导入 using System.Drawing; 代码如下: // /// 生成缩略图 /// ///源图途径 ///缩略图途径 ///缩略图宽度 ///缩略图高度 ///生成缩略图的方法:HW指定高宽缩放(能够变形);W指定宽,高按份额 H指定高,宽按份额 Cut指定高宽削减(不变形... 阅读全文
posted @ 2012-11-12 17:38 郑文亮 阅读(744) 评论(1) 推荐(1) 编辑
摘要:学习c++如果不了解内存分配是一件非常可悲的事情。而且,可以这样讲,一个C++程序员无法掌握内存、无法了解内存,是不能够成为一个合格的C++程序员的。 一、内存基本构成 可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆区:亦称动态内存分配。程序在运 阅读全文
posted @ 2012-11-12 10:29 郑文亮 阅读(1121) 评论(0) 推荐(0) 编辑
摘要:在C++中,内存可分为系统数据区,自由存储区,文本区,const数据区,全局静态区,堆区和栈区。其中,系统数据区存放的是系统数据,我们是不能自由访问的,有时候windows系统会突然弹出一个消息框,内容是“内存不能为read”就是错误访问系统数据区的结果;自由存储区用来存放由C延伸而来的malloc()函数所分配的数据;文本区存放着我们的函数代码,我们调用函数时的底层行为就类似于先去操作一个指针,而这个指针就指向函数指令所在的地址,也就是在文本区中;const数据区,顾名思义,就是存放不可修改的数据的内存区域,我们定义的const变量都存放在这里。最后,我们来看全局静态存储区、堆区和栈区。 先 阅读全文
posted @ 2012-11-12 10:28 郑文亮 阅读(1526) 评论(1) 推荐(1) 编辑
摘要:今天看博文时,看到了c++的static关键字的一些总结,还涉及到了一些代码的存储位置,为了有时间的时候能够看一下,还是自己把它给摘抄下来吧。C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下://Example 1#include <iostream.h>void fn();static int n; 阅读全文
posted @ 2012-11-12 09:54 郑文亮 阅读(2896) 评论(0) 推荐(2) 编辑
摘要:标准(窗口)消息:窗口消息一般与窗口内部运作有关,如创建窗口,绘制窗口,销毁窗口,通常,消息是从系统发到窗口,或从窗口发到系统。发送函数SendMessage()或者PostMessage()。除WM_COMMAND之外,所有的以WM_开头的消息。从CWnd派生的类,都可以接受到这类消息。注意:标准消息并不需要我们指定处理函数名称,是默认的对应关系。宏名称 对应消息 消息处理函数ON_WM_CHAR WM_CHAR OnCharON_WM_CLOSE WM_CLOSE OnCloseON_WM_CREATE WM_CREATE ... 阅读全文
posted @ 2012-11-12 09:02 郑文亮 阅读(1548) 评论(0) 推荐(0) 编辑
摘要:比如 一个函数 chat(link &a); chat(ling *a); 前者引入一个地址做形参 是不是可以把一个指针变量p。。 这么用chat(p); 那跟第二个函数 有什么区别呢 都是传地址啊。。 小弟弄不明白~~chat(int&a); chat(int *a); 这两个函数是完全不同意义的东西,你的理解主要是在int&a和int* a这个类型上面。要注意int&和int*是两个完全不同的类型。int&是引用类型,而int*是指向int类型变量的指针类型。 void chat(int&a) { a=20; } 调用此函数: int x=1 阅读全文
posted @ 2012-11-10 17:53 郑文亮 阅读(836) 评论(2) 推荐(0) 编辑
摘要:什么是coredump?通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。可以理解为把程序工作的当前状态存储成一个文件。许多程序和操作系统出错时会自动生成一个core文件。如何使用coredump?coredump可以用在很多场合,使用Linux,或者solaris的人可能都有过这种经历,系统在跑一些压力测试或者系统负载一大的话,系统就hang住了或者干脆system panic.这时唯一能帮助你分析和解决问题的就是coredump了。现在很多应该程序出错时也会出现coredump.分析coredump的工具现在大部分类unix操作系统都提供了分析core文 阅读全文
posted @ 2012-11-10 17:19 郑文亮 阅读(437) 评论(0) 推荐(0) 编辑
摘要:CPen* SelectObject( CPen* pPen ); CBrush* SelectObject( CBrush* pBrush ); virtual CFont* SelectObject( CFont* pFont ); CBitmap* SelectObject( CBitmap* pBitmap ); int SelectObject( CRgn* pRgn ); CGdiObject* SelectObject( CGdiObject* pObject ); Selects an object into the device context. 把以对象选入设备环境 谁是设 阅读全文
posted @ 2012-11-10 17:13 郑文亮 阅读(2907) 评论(1) 推荐(0) 编辑
摘要:原理winsock模拟表单上传数据,这样一般的上传接收组件都可以接收,如我们常用的 upload.asp,java的upload.do等特点:支持多文件带表单参数设定同时上传。下载地址http://www.vdisk.cn/down/index/3832662A5292/WebUploadFile.ocx.html使用图上图是配置服务器接收的请求,大家应该看得懂吧。客户端ocx使用方法,如果在vb,vc等工程调用的话,可以象上图一样在属性页设置。1)指定上传服务器各项参数,以下参数灵活设置 WebUpload.Host = "192.168.0.x" WebUpload.P 阅读全文
posted @ 2012-11-09 17:25 郑文亮 阅读(2702) 评论(2) 推荐(0) 编辑
摘要:利用CString和CStringA进行UNICODE字符串和ANSI字符串转换,CString 转化为const char *2010年01月19日 星期二 17:17使用UNICODE字符集编程时,总是需要使用那些不支持UNICODE的库,例如sqlite3,Lua等必须使用char*类型的。这个时候用CStringA是最好的。另外CStringA与CString可以灵活地随意转换赋值,注意不能这样用:CString str1;CStringA str2=str1;而要这样用:CStringA str2;str2=str1;这样就可以把UNICODE版本字符串转换为Ansi版本了,非常之强 阅读全文
posted @ 2012-11-09 17:13 郑文亮 阅读(3731) 评论(0) 推荐(1) 编辑
摘要:前段时间,做http协议上传文件及断点续传控件时,在客户端采用C++调用CHttpConnection、CHttpFile进行文件上传。移植到Unicode编码时,上传得到的文件总是小于正常文件。最终发现问题出在CString::GetLength()方法上。当采用Unicode编码时,而且http header字符串中出现了中文或其其他多字节字符,该方法仍旧只返回字符数,而不是实际的字节数,这样在http header中的信息会比实际的少,导致http发送的数据小于预期的。 按照MSDN的说吗,在选用MBCS多字节字符串编码时,该方法会得到正确的字节数。此时没有问题。 For multiby 阅读全文
posted @ 2012-11-09 17:06 郑文亮 阅读(29193) 评论(0) 推荐(2) 编辑
摘要:字符串的长度通常是指字符串中包含字符的数目,但有的时候人们需要的是字符串所占字节的数目。常见的获取字符串长度的方法包括如下几种。1.使用sizeof获取字符串长度sizeof的含义很明确,它用以获取字符数组的字节数(当然包括结束符\0)。对于ANSI字符串和UNICODE字符串,形式如下:sizeof(cs)/sizeof(char) sizeof(ws)/sizeof(wchar_t)可以采用类似的方式,获取到其字符的数目。如果遇到MBCS,如"中文ABC",很显然,这种办法就无法奏效了,因为sizeof()并不知道哪个char是半个字符。2.使用strlen()获取字符 阅读全文
posted @ 2012-11-09 16:17 郑文亮 阅读(617) 评论(0) 推荐(0) 编辑
摘要:利用标准库函数strncpy(),可以将一字符串的一部分拷贝到另一个字符串中。strncpy()函数有3个参数:第一个参数是目录字符串;第二个参数是源字符串;第三个参数是一个整数,代表要从源字符串拷贝到目标字符串中的字符数。以下是一个用strncpy()函数拷贝字符串的一部分的例子:#include<stdio.h>#include<string.h>voidmain(void);voidmain(void){char*source_str="THISISTHESOURCESTRING";chardest_strl[40]={0},dest_str2 阅读全文
posted @ 2012-11-09 13:51 郑文亮 阅读(12078) 评论(3) 推荐(0) 编辑
摘要:在计算机科学中,内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程序员才可以分析出来。然而,有不少人习惯于把任何不需要的内存使用的增加描述为内存泄漏,严格意义上来说这是不准确的。 一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。应用程序一般使用malloc 阅读全文
posted @ 2012-11-09 13:14 郑文亮 阅读(380) 评论(0) 推荐(0) 编辑
摘要://========================================================================//TITLE://malloc、realloc和new你明白了么?//AUTHOR://norains//DATE://Saturday05-January-2008//Environment://VS2005 +SDK-WINCE5.0-MIPSII//EVC + SDK-WINCE5.0-MIPSII//====================================================================== 阅读全文
posted @ 2012-11-09 10:43 郑文亮 阅读(882) 评论(0) 推荐(0) 编辑
摘要:LPTSTR GetBuffer( int nMinBufLength );nMinBufLength为buffer的字符长度,不包括结束符返回CString对象的内部buffer指针,非const,可以修改CString内容void ReleaseBuffer( int nNewLength = -1 );nNewLength为新的字符串长度,-1表示维持当前字符串长度释放多余内存注意点:调用CString的任何其他member function之前,必须先调用ReleaseBuffer,否则可能会出错!(因CString的内容改变了,而其长度未作相应修改,ReleaseBuffer完成此工 阅读全文
posted @ 2012-11-09 10:08 郑文亮 阅读(1201) 评论(0) 推荐(0) 编辑
摘要:先 转载一段别人的文章CString类的这几个函数, 一直在用, 但总感觉理解的不够透彻, 不时还有用错的现象. 今天抽时间和Nico一起分析了一下, 算是拨开了云雾: GetBuffer和ReleaseBuffer是一套需要配合使用的函数, 与GetBufferSetLength相比, 优点是如果分配的空间大于实际保存的字符串(0结尾), ReleaseBuffer会把多余申请的空间释放, 归还给系统; 但使用时需要注意以下问题: 如果要保存的字符串为abc(0结尾), 则GetBuffer参数应至少为3; 如果要保存的内容不是以0结尾, 比如是读取文件数据, 则GetBuffer参数如果大 阅读全文
posted @ 2012-11-09 09:28 郑文亮 阅读(5319) 评论(0) 推荐(0) 编辑
摘要:CString内存泄露的解决办法 收藏 8W~9tE+L9k-dI St引文:在多数情况下,比较简单的使用过程中,MFC的这个BUG不会发作,也就是不会有内存泄露。那什么时候CString会暴露出BUG那?U8N#Rwq我以前出现错误的经验是:如果多次调用带有CString引用的参数的函数(形如:funstr(CString &str);这样的函数),在一定的时候(和字符串长度有关系),CString的内部引用记数器发生记数混乱,造成内存泄露。_+^%bJc J8V,^a!dH8ZRgFJ 应为vc6.0在CString类的包装上的“小问题”,CStri 阅读全文
posted @ 2012-11-09 09:11 郑文亮 阅读(8346) 评论(1) 推荐(1) 编辑
摘要:用过C言语的人都知道每一个C的程序都会有一个main函数,但有时看别人写的程序却出现了_tmain,会感动很困惑。我当时也是很困惑,于是上网找资料看。现在将我得到的结果总结一下。因为并没有什么根据,如果有误。欢迎指正:_tmain与main的区别1。 main是C程序的函数,_tmain是main为了支持unicode所使用的main的別名2。 _tmain的定义在<tchar.h>可以找到,如#define _tmain main,所以要加#i nclude <tchar.h>才能用。_tmain()是个宏,如果是UNICODE则他是wmain()否则他是main() 阅读全文
posted @ 2012-11-09 08:49 郑文亮 阅读(1721) 评论(0) 推荐(1) 编辑
摘要:摘要本文分析了Windows环境使用MFC调试内存泄露的技术,介绍了在Windows环境下用VC++查找,定位和消除内存泄露的方法技巧。关键词:VC++;CRT 调试堆函数;试探法。编译环境VC++6.0技术原理检测内存泄漏的主要工具是调试器和 CRT 调试堆函数。若要启用调试堆函数,请在程序中包括以下语句: #define CRTDBG_MAP_ALLOC#include <stdlib.h>#include <crtdbg.h>注意 #include 语句必须采用上文所示顺序。如果更改了顺序,所使用的函数可能无法正确工作。 通过包括 crtdbg.h,将 mallo 阅读全文
posted @ 2012-11-08 17:10 郑文亮 阅读(652) 评论(0) 推荐(0) 编辑
摘要:VC 工程char* p = NULL;extern "C" _declspec(dllexport) char* _stdcall output_number(char* aa){ CString s = aa;s += "abcd";int nlen = s.GetLength();if(p != NULL){delete[] p;p = NULL;}p = new char[nlen + 1];p[nlen] = 0;memcpy(p,s.GetBuffer(0),s.GetLength());return p;} extern "C&q 阅读全文
posted @ 2012-11-08 17:09 郑文亮 阅读(1436) 评论(0) 推荐(1) 编辑
摘要:怎么理解CString & 类型?在函数参数表中,列了一项是此类型,据说是引用。可以给个具体方法,示例么?由于子程序调用是栈传递参数,因此对参数的修改不会改变调用者传入的参数的值。如果要改变调用者的参数值C语言一般用指针。但指针使用起来不是很方便,可能不清楚指针的意义是传入输入缓冲区首地址,还是需要输出的参数值。C++使用引用用就让这一意义更清楚。比如bool WriteStringIntoStruct(const char* szSource, mystruct *StructInstance );前一个指针是要读取的内存首地址,后一个是要改变的结构的实例的指针。如果这个函数写成 b 阅读全文
posted @ 2012-11-08 13:52 郑文亮 阅读(2018) 评论(0) 推荐(1) 编辑
摘要:<string>是C++标准库头文件,包含了拟容器class std::string的声明(不过class string事实上只是basic_string<char>的typedef),用于字符串操作。<cstring>是C标准库头文件<string.h>的C++标准库版本,包含了C风格字符串(NUL即'\0'结尾字符串)相关的一些类型和函数的声明,例如strcmp、strchr、strstr等。<cstring>和<string.h>的最大区别在于,其中声明的名称都是位于std命名空间中的,而不是后者的全 阅读全文
posted @ 2012-11-08 11:24 郑文亮 阅读(4203) 评论(0) 推荐(0) 编辑
摘要:Cstring好像是MFC类库中的。string好像是C++ 标准库中的继续追问:那他们的作用是一样的吗?补充回答:是一样的,在不同的场合,各有各的优点。CString能与MFC类库的其他类,有机完美的结合起来。可以方便的使用MFC。其他答案(1)CString 是MFC或者ATL中的实现,string是C++标准库中的实现string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中; CString(typedef CStringT<TCHAR, StrTraitMFC<TCHAR>> CString)为Vis 阅读全文
posted @ 2012-11-08 11:22 郑文亮 阅读(1342) 评论(0) 推荐(1) 编辑
摘要:这几天经常用到的,不如记下吧。这三种类型各有各的优点,比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。1 string to CStringCString.format("%s",string.c_str());2 CString to stringstring str(CSt 阅读全文
posted @ 2012-11-08 11:11 郑文亮 阅读(387) 评论(0) 推荐(0) 编辑
摘要:作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的。STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现。本教程旨在传播和普及STL的基础知识,若能借此机会为STL的推广做些力所能及的事情,到也是件让人愉快的事情。 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。这种现象有些类似于Microsoft Visual C++中的MFC(Microsoft Foundation Class Library),或者是B.. 阅读全文
posted @ 2012-11-08 10:23 郑文亮 阅读(432) 评论(0) 推荐(0) 编辑
摘要:C/C++指令 #undef ,#ifdef, #ifndef,#if的用法 收藏 #undef #undef 是在后面取消以前定义的宏定义 该指令的形式为 #undef 标识符 其中,标识符是一个宏名称。如果标识符当前没有被定义成一个宏名称,那么就会忽略该指令。 一旦定义预处理器标识符,它将保持已定义状态且在作用域内,直到程序结束或者使用#undef 指令取消定义。 在此程序中,我们将取消在先前程序中对预处理器的定义。 源代码: #define TRACE(x) #if DBG #undef TRACE #define TRACE(x) g_TraceCallbac... 阅读全文
posted @ 2012-11-08 09:28 郑文亮 阅读(1342) 评论(0) 推荐(0) 编辑
摘要:malloc函数百科名片本词条主要介绍 malloc 函数Malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。目录函数简介函数声明函数的工作机制举例说明编辑本段函数简介 原型:extern void *malloc(unsigned int num_bytes); 头文件:在TC2.0中可以用malloc.h或 alloc.h (注意:alloc.h 与 malloc.h 的内容是完全一致的),而在Visual C++6.0中可以用malloc.h或者st.. 阅读全文
posted @ 2012-11-08 09:24 郑文亮 阅读(8086) 评论(0) 推荐(0) 编辑
摘要:sprintf函数的功能与printf函数的功能基本一样,只是它把结果输出到指定的字符串中了,看个例子就明白了:例:将"test 1 2"写入数组s中#include<stdio.h> int main(void) { char s[40];sprintf(s,"%s%d%c","test",1,'2'); /*第一个参数就是指向要写入的那个字符串的指针,剩下的就和printf()一样了你可以比较一下,这是向屏幕输入 printf("%s%d%c","test",1, 阅读全文
posted @ 2012-11-08 08:45 郑文亮 阅读(12810) 评论(1) 推荐(0) 编辑
摘要:PB是一种面向C/S方式的数据库应用程序的开发工具,PB拥有数据窗口、嵌入式SQL语句等技术,在开发数据库应用程序时显得特别方便。但在涉及到系统底层的一些功能时,PB本身提供的功能就有些不尽如人意。因为Windows操作系统提供给用户的接口是C语言函数形式,而VC在调用系统底层功能方面,从编程角度来讲就要方便得多。VC还有许多PB所不具备的优点,比如数据结构表达能力强,实现复杂算法的程序相对容易开发,运行速度快等。此外,不少外围设备的驱动程序提供的也是C接口。若能将这两种语言结合起来使用,充分发挥它们各自的优点,将会大大提高开发效率、增强应用程序的功能。动态链接库简述动态链接库(Dynamic 阅读全文
posted @ 2012-11-07 16:54 郑文亮 阅读(3300) 评论(0) 推荐(0) 编辑
摘要:网上关于MFC下、及非MFC检测内存泄露的方法很多,当然都是基于陈旧的VC++6.0版本的,虽然和对我用处不大,但是只是让我明白了几点:1.非MFC下需要自己动手添加编写内存检测代码,MFC下其调试输出窗口就可以显示是否有内存泄露问题;2.显示内存泄露的时候,一般有两种情况:(1)指明泄露代码语句:g:\circle\2010227\flameui\0901_flamedetect_multhread\flamedetect\flamedetectdlg.cpp(312) : {96352} normal block at 0x02D16928, 256 bytes long.Data: &l 阅读全文
posted @ 2012-11-07 16:43 郑文亮 阅读(1469) 评论(1) 推荐(1) 编辑
摘要:今天运行了一段程序: 1 #include "stdafx.h" 2 3 4 int _tmain(int argc, _TCHAR* argv[]) 5 6 { 7 8 9 return 0;10 }11 void f(int x,int y)12 {13 15 int *q=&(x++);16 17 18 }没有编译过去报错说:“&”要求左值!开始学习:1.关于++a和a++的故事实际运算:++a等价于 a=a+1而 a++等价于(t=a;a=a+1,t);基本意思就是说所以t这个东西是个临时的东西放到哪了?我们来看一下汇编指令:1 7: ... 阅读全文
posted @ 2012-11-07 14:43 郑文亮 阅读(713) 评论(0) 推荐(0) 编辑
摘要:一:使用delete删除new分配的数组是要注意的事项 1.不要使用delete释放不是new分配的内存 2.不要使用delete释放同一内存块两次(也就是同一指针变量) 3.如果用new[]分配内存分配内存侧用delete[]释放内存二:指针小结 1.声明指针 要声明特点类型的指针如下面格式 int *pi; double *pd; 2.给指针赋值 应将内存地址赋予指针,可以对变量名用&操作符,来获取命名的内存地址,new操作符返回 未命名的内存地址。 int pa=3; pi=&pi; //赋予的地址而不是值 pd=new char;3.解除指针引用对指针解除引用意味着获取 阅读全文
posted @ 2012-11-07 14:27 郑文亮 阅读(1015) 评论(2) 推荐(0) 编辑
摘要:要了解指针,多多少少会出现一些比较复杂的类型,其实要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,其原则: 从变量名处起,根据运算符优先级结合,一步一步分析。int p; //这是一个普通的整型变量int *p; //首先从P处开始,先与*结合,所以说明P是一个指针,然后再与int结合,说明指针所指向的内容的类型为int型.所以P是一个返回整型数据的指针int p[3]; //首先从P处开始,先与[]结合,说明P是一个数组,然后与int结合,说明数组里的元素是整型的,所以P是一个由整型数据组成的数组int *p[3]; //首 阅读全文
posted @ 2012-11-07 14:13 郑文亮 阅读(544) 评论(1) 推荐(1) 编辑
摘要:一、 Printf 输出格式C中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型,其中方括号[]中的项为可选项。各项的意义介绍如下:1.类型类型字符用以表示输出数据的类型,其格式符和意义下表所示:表示输出类型的格式字符 格式字符意义a 浮点数、十六进制数字和p-计数法(C99)A 浮点数、十六进制数字和p-计数法(C99)c 输出单个字符d 以十进制形式输出带符号整数(正数不输出符号)e 以指数形式输出单、双精度实数E 以指数形式... 阅读全文
posted @ 2012-11-07 13:11 郑文亮 阅读(1751) 评论(0) 推荐(0) 编辑
摘要:在微软vc提供的头文件中有定义在winnt.h中typedef long LONG;在windef.h中typedef LONG LRESULT;所以LRESULT就是long,也就是长整形之所以取名类LRESULT,L=>longresult表示结果,说明这个函数的返回值是某个结果仅此而已 阅读全文
posted @ 2012-11-07 11:27 郑文亮 阅读(4387) 评论(0) 推荐(1) 编辑
摘要:L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。即win32中,long,near,far指针与普通指针没有区别,LP 与P是等效的。P表示这是一个指针。T表示_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。STR表示这个变量是一个字符串。C表示是一个常量,const。LPTSTR: 如果定义了UNICOD 阅读全文
posted @ 2012-11-07 11:07 郑文亮 阅读(1331) 评论(0) 推荐(0) 编辑
摘要:&是取地址运算符,表明只把变量的地址传出去,改变变量的值。*是传递指针,虽然也改变变量的值,但如果要改变原变量的地址时,则不会影响主调函数中该变量的地址,而&则会改变。你可以用一个实例去做个实验。int main(){int a = 1 , b = 2;swap1(a, b);cout <<"a = "<< a << " ,"<<"b="<<b;swap2(a,b);cout <<"a = "<< a << 阅读全文
posted @ 2012-11-07 10:31 郑文亮 阅读(795) 评论(0) 推荐(0) 编辑
摘要:CloseHandle()函数的使用??很多程序在创建线程都这样写的:............ThreadHandle = CreateThread(NULL,0,.....);CloseHandel(ThreadHandle );。。。。。这不是刚好创建又关闭了吗?线程怎么运行呢?================================================Closing a thread handle does not terminate the associated thread. To remove a thread object, you must terminat 阅读全文
posted @ 2012-11-07 09:44 郑文亮 阅读(977) 评论(0) 推荐(0) 编辑
摘要:从广义上,能够从一个数值拎起一大堆数据的东西都可以叫做句柄。句柄的英文是"Handle",本义就是"柄",只是在计算机科学中,被特别地翻译成"句柄",其实还是个"柄"。从一个小东西拎起一大堆东西,这难道不像是个"柄"吗? 然后,指针其实也是一种"句柄",只是由于指针同时拥有更特殊的含义——实实在在地对应内存里地一个地址——所以,通常不把指针说成是"句柄"。但指针也有着能从一个32位的值引用到一大堆数据的作用,这不是句柄又是什么? Windows系统中有许多 阅读全文
posted @ 2012-11-07 09:31 郑文亮 阅读(384) 评论(0) 推荐(0) 编辑
摘要:句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。当你需要对某个内存进行直接操作时,可以使用GlobalLock锁住这段内存并获得指针来直接进行操作。 “句柄”(handle),handle的本意是把柄,把手的意思。是你与操作系统打交道的东西。举个例子:比如你做了亏心事( 阅读全文
posted @ 2012-11-07 09:28 郑文亮 阅读(2153) 评论(0) 推荐(0) 编辑
摘要:昨天用jQuery插件aeImageResize,发现它更有优势:每张图片加载完后,会马上进行等比缩放。 这归于图片对象Image的加载事件onload的功劳。 查看插件的源码,发现它也依赖图片对象的complete属性和onload事件,并且特别把IE6区分对待,到底IE6在图片加载对象上,与其它浏览器有什么不同呢? 看下文: 通过js操纵DOM很多情况下都是为了实现和当前页html元素的异步载入,我谈谈对Image对象的一些认识。 看个例子: 复制代码 代码如下:<input type="button" name="" value=" 阅读全文
posted @ 2012-11-01 12:48 郑文亮 阅读(1032) 评论(0) 推荐(0) 编辑