08 2013 档案

摘要:一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3 后缀表达式:不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:2 1 + 3 * 前缀表达式:同后缀表达式一样,不包含括号,运算符放在两个运算对象的前面,如:* + 2 1 3 二.表达式的计算: 将中缀表达式转换为后缀表达式的算法思想: ·数字时,加入后缀表达式; ·运算符: a. 若为最低级的运算符,入栈; b. 若为 '(',入栈; c. 若为 ')',则把栈中的的运算符加入后缀表达式 阅读全文
posted @ 2013-08-31 10:45 问笑 阅读(432) 评论(0) 推荐(0)
摘要:引言 文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类,常用的有Win32 API的CreateFile()、WriteFile()、ReadFile()和MFC提供的CFile类等。一般来说,以上这些函数可以满足大多数场合的要求,但是对于某些特殊应用领域所需要的动辄几十GB、几百GB、乃至几TB的海量存储,再以通常的文件处理方法进行处理显然是行不通的。目前,对于上述这种大文件的操作一般是以内存映射文件的方式来加以处理的,本文下面将针对这种Windows核心编程技术展开讨论。 内存映射文件 内存映射文件与虚拟内存有些类似,通过内存映射文件可以... 阅读全文
posted @ 2013-08-30 22:38 问笑 阅读(4704) 评论(0) 推荐(1)
摘要:同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的 LRESULT值返回给调用者。异步 异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。以 CAsy.. 阅读全文
posted @ 2013-08-30 20:31 问笑 阅读(240) 评论(0) 推荐(0)
摘要:讲一下套接字模式和套接字I/O模型的区别。先说明一下,只针对Winsock,如果你要骨头里挑鸡蛋把UNIX下的套接字概念来往这里套,那就不关我的事。套接字模式:阻塞套接字和非阻塞套接字。或者叫同步套接字和异步套接字。套接字模型:描述如何对套接字的I/O行为进行管理。Winsock提供的I/O模型一共有五种:select,WSAAsyncSelect,WSAEventSelect,Overlapped,Completion。今天先讲解select。1:select模型(选择模型)先看一下下面的这句代码:int iResult = recv(s, buffer,1024);这是用来接收数据的,在默 阅读全文
posted @ 2013-08-30 20:23 问笑 阅读(506) 评论(0) 推荐(0)
摘要:Operator precedence and associativity-运算符的优先级和结合性,下表是C语言的运算符优先级和结合性表格优先级我就不说了,表中写的很清楚,说一下结合性。运算符的结合性运算符的结合性是指相同优先级的运算符在同一个表达式中,且没有括号的时候,运算符和操作数的结合方式,通常有从左到右结合和从右到左结合两种方 式。举个例子,假设~是一个运算符,又有表达式a~b~c,如果~是左结合的,那么该表达式被解析为(a~b)~c,如果~是右结合的,那么该表达式将被 解析为a~(b~c)。比如上表中三目运算符?:是从右向左结合的,那么下面的表达式a > b ? b > 阅读全文
posted @ 2013-08-30 16:21 问笑 阅读(549) 评论(0) 推荐(0)
摘要:结合性有两种,一种是自左至右,另一种是自右至左,大部分运算符的结合性是自左至右,只有单目运算符、三目运算符的赋值运算符的结合性自右至左。优先级有15种。记忆方法如下:记住一个最高的:构造类型的元素或成员以及小括号。记住一个最低的:逗号运算符。剩余的是一、二、三、赋值。意思是单目、双目、三目和赋值运算符。在诸多运算符中,又分为:算术、关系、逻辑。两种位操作运算符中,移位运算符在算术运算符后边,逻辑位运算符在逻辑运算符的前面。再细分如下:算术运算符分*,/,%高于+,-。关系运算符中,》,》=,《,〈=高于==,!=。逻辑运算符中,除了逻辑求反(!)是单目外,逻辑与(&&)高于逻辑 阅读全文
posted @ 2013-08-30 16:10 问笑 阅读(1674) 评论(0) 推荐(0)
摘要:在多线程的情况下,如果存在多个线程要使用同一个资源的情况时,则需要在线程之间进行协调(同步)才能使程序完成预定的工作,而不会出现灾难性的冲突。 MFC 提供的多线程类分为两类:同步对象(CSyncObject 、CSemaphore 、CMutex 、CCriticalSection 和 CEvent )和同步访问对象(CMultiLock 和 CSingleLock )。当必须控制对资源的访问以确保资源的完整性时,使用同步类。同步访问类用于获取对这些资源的访问权。本主题介绍各个类的适用情况。若要确定应使用的同步类,请询问以下一系列问题:应用程序必须等到发生某事才能访问资源(例如,在将数据写入 阅读全文
posted @ 2013-08-30 11:52 问笑 阅读(429) 评论(0) 推荐(0)
摘要:“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种: 一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。 二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身... 阅读全文
posted @ 2013-08-30 11:49 问笑 阅读(202) 评论(0) 推荐(0)
摘要:这几天专门调研了一下MFC中如何动态创建控件及其消息响应函数。参考帖子如下:(1)http://topic.csdn.net/u/20101204/13/5f1b1e70-2f1c-4205-ba10-41616d16f07e.html(2)http://www.cppblog.com/deercoder/articles/107132.html这两篇帖子是比较经典的,能够回答我的问题。但是如何动态创建消息响应函数呢?这需要利用另外一个命令:ON_COMMAND_RANGE参考如下帖子:http://topic.csdn.net/t/20020728/22/906766.html注意:ON_C 阅读全文
posted @ 2013-08-30 11:19 问笑 阅读(659) 评论(0) 推荐(0)
摘要:前言:串操作是编程中最常用也最基本的操作之一. 做为VC程序员,无论是菜鸟或高手都曾用过CString.而且好像实际编程中很难离得开它(虽然它不是标准C++中的库).因为MFC中提供的这个类对 我们操作字串实在太方便了,CString不仅提供各种丰富的操作函数、操作符重载,使我们使用起串起来更象basic中那样直观;而且它还提供了动态内 存分配,使我们减少了多少字符串数组越界的隐患。但是,我们在使用过程中也体会到CString简直太容易出错了,而且有的不可捉摸。所以有许多高人站过 来,建议抛弃它。 在此,我个人认为:CString封装得确实很完美,它有许多优点,如“容易使用 ,功能强,动态分配 阅读全文
posted @ 2013-08-30 10:40 问笑 阅读(208) 评论(0) 推荐(0)
摘要:char :单字节变量类型,最多表示256个字符,wchar_t :宽字节变量类型,用于表示Unicode字符,它实际定义在里:typedef unsigned short wchar_t。为了让编译器识别Unicode字符串,必须以在前面加一个“L”,定义宽字节类型方法如下: wchar_t c = `A' ; wchar_t * p = L"Hello!" ; wchar_t a[] = L"Hello!" ; 其中,宽字节类型每个变量占用2个字节,故上述数组a的sizeof(a) = 14TCHAR / _T( ) : 如果在程序中既包括A 阅读全文
posted @ 2013-08-30 10:21 问笑 阅读(266) 评论(0) 推荐(0)
摘要:Ctrl+E,D ----格式化全部代码Ctrl+E,F ----格式化选中的代码CTRL + SHIFT + B生成解决方案CTRL + F7 生成编译CTRL + O 打开文件CTRL + SHIFT + O打开项目CTRL + SHIFT + C显示类视图窗口F4 显示属性窗口SHIFT + F4显示项目属性窗口CTRL + SHIFT + E显示资源视图F12 转到定义CTRL + F12转到声明CTRL + ALT + J对象浏览CTRL + ALT + F1帮助目录CTRL + F1 动态帮助F1 帮助SHIFT + F1当前窗口帮助CTRL + ALT + F3帮助-搜索SHIF 阅读全文
posted @ 2013-08-30 10:09 问笑 阅读(177) 评论(0) 推荐(0)
摘要:最近老用到Cstring, TCHAR*, char*的转换.找到一篇写得蛮详细的. 引用过来, 方便自己以后查阅.char是类型TCHAR也是!不过他可以通过是否定义了UNICODE宏来判断到底是char还是w_char;TCHAR是一种字符串类型,它让你在以MBCS和UNNICODE来build程序时可以使用同样的代码,不需要使用繁琐的宏定义来包含你的代码,而char代表ASCII的字符#ifdef UNICODE typedef wchar_t TCHAR; #else typedef char TCHAR; #endif 所以用MBCS来build时,TCHAR是char,使用UNI. 阅读全文
posted @ 2013-08-30 09:57 问笑 阅读(634) 评论(0) 推荐(0)
摘要:Javascript中可以对所传参数在函数内进行修改,如下?12345function func1(name) {name = 'lily';alert(name);}func1('jack');//输出lily再看一个例子?12345678function fun1(n) {this.name = n;}function fun2(name) {fun1.call(this,'lily');alert(name);}fun2("jack");//输出"jack"fun1函数想把fun2调用时的参数修改为“ 阅读全文
posted @ 2013-08-29 17:59 问笑 阅读(527) 评论(0) 推荐(0)
摘要:前一阵子,发现JavaScript中允许临时改变标签的href属性,当改变其属性后你点击它可能看不出有多严重,但是,它可以通过欺骗手段来诱骗用户透露他们的详细资料。// Uncompressedvar links = document.getElementsByTagName('a');for(var i=0; i 标签的href属性。令人惊讶的是,浏览器竟然把受害者导航到一个新的链接。而受害者通常会简单的认为,可能只是一个重定向链接,这里我们假设网站的访问者已经习惯了这种重定向现象,这一缺陷便可以进行网络钓鱼。这种钓鱼很难能被检测到。很多人都使用JavaScript/ jQu 阅读全文
posted @ 2013-08-29 09:39 问笑 阅读(456) 评论(0) 推荐(0)
摘要:实际操作中可以在webshell用udf.dll提权,用函数的上传文件功能上传文件到启动目录,再用shut函数重起系统.(目前没成功过,有 机会本地测试一下,先记录在这了).如果是英文版的系统,启动目录在 "C:\\Documents and Settings\\All Users\\Start Menu\\Programs\\Startup"1、连接到对方MYSQL 服务器mysql -u root -h 192.168.0.1mysql.exe 这个程序在你安装了MYSQL的的BIN目录中 2、让我们来看看服务器中有些什么数据库mysql>show databas 阅读全文
posted @ 2013-08-28 18:32 问笑 阅读(867) 评论(0) 推荐(0)
摘要:一点关于UDF的发散思路Author:mer4en7yTeam:90sec声明:UDF源码作者langouster相信各位牛对UDF都不会陌生,看论坛叶总共享了一份UDF源码,以前一直没看过,于是看了看,写了这篇垃圾文章,再此抛砖引玉了,望大牛勿笑!以cmdshell函数为例cmdshell函数大家都不会陌生GetSystemDirectory(ShellPath,MAX_PATH-1);strcat(ShellPath,"cmd.exe");GetEnvironmentVariable("temp",TempFilePath,MAX_PATH-1);s 阅读全文
posted @ 2013-08-28 17:35 问笑 阅读(1248) 评论(0) 推荐(0)
摘要:最近在学习表达式求值问题,想使用C++或C语言实现一个带圆括号的十进制正整数的表达式求值控制台程序。这个问题可以通过栈或者二叉树遍历来解决。记 得以前在学校学习数据结构中栈的应用时看到过,另外编译原理这门课也有讲过。重新翻开>一书的P80~P83第3张有关栈相应的章节时,有一个无括号算术表达式的求值问题,其次在对应的光盘上课程设计里头有表达式求值的 相关描述,这里记录如下:[问题描述]一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如 阅读全文
posted @ 2013-08-28 10:08 问笑 阅读(881) 评论(0) 推荐(0)
摘要:由于匈牙利风格信息冗余,并与编码规范的其它条款冲突,所以它的存在仅限于VC中。 下面是它的命名部分规则: 1. 类的命名 C+首字母大写的单词组合,通常是名字性短语,一般不含下划线 如CMyClass 2 函数(类成员函数) 首字母大写的单词组合,通常是动宾结构的短语一般不含下划线 如 GetName(), PostMessage(),SaveProfile()等 3 成员变量 m_开头,小写的类型标记标记+首字母大写的单词组合,通常是名字性短语 其中,小写的类型标记,DWORD简写为dw,int 记为 i, usigned int记为u或n,HANDLE记为h,Window记为wnd, 以0 阅读全文
posted @ 2013-08-28 09:26 问笑 阅读(709) 评论(0) 推荐(0)
摘要:1 常见命名规则 比较著名的命名规则首推匈牙利命名法, 这种命名方法是由Microsoft程序员查尔斯·西蒙尼(Charles Simonyi) 提出的。 其主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。 匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀; 前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。 例如:lpszStr, 表示指向一个以'\0'结尾的字符串(sz)的长指针(lp)变量。 骆驼(Camel)命名法近年来越来越流行, 在许多新的函数库和Java这样的平台下使用得当相多。 骆驼命名法,正如它的 阅读全文
posted @ 2013-08-28 09:16 问笑 阅读(270) 评论(0) 推荐(0)
摘要:在SDK中使用非模态对话框时的几个问题: 1、为什么要调用IsDialogMessage?? 2、非模态对话框与主窗口有什么区别? 3、如果不调用IsDialogMessage,消息能不能传递到对话框? 4、如果一定要调用IsDialogMessage,那么如果有多个非模态对话框的话,是否对每一个非模态对话框都必须单独调用 IsDialogMessage?如果真是这样,MFC是如何处理的?因为MFC隐藏了主消息循环,我如何增加对IsDialogMessage的调用?在SDK中使用非模态对话框时,主循环中必须插入下列代码:1.while(GetMessage(&msg,NULL,0,0) 阅读全文
posted @ 2013-08-26 20:10 问笑 阅读(870) 评论(0) 推荐(0)
摘要:一、MFC应用程序中处理消息的顺序:1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数3.WindowProc() 该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数4.OnWndMsg() 该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用On 阅读全文
posted @ 2013-08-26 15:32 问笑 阅读(738) 评论(0) 推荐(0)
摘要:探索Win32系统之窗口类(Window Classes in Win32)Kyle MarshMicrosoft Developer Network Technology GroupMSDN技术组摘要本文主要介绍win32系统里窗口类的运做和使用机制,探索一些细节问题,使win32窗口类的信息更加明朗化。在本文中,"类","窗口类"这两个术语等同,都不是指C++类,而是指和窗口相关的一组信息的集合。简介窗口类的风格决定了窗口的外观和风格。所有的窗口都会属于某一个窗口类。在创建一个窗口之前,必须注册(register)一个相应的窗口类。32位Window 阅读全文
posted @ 2013-08-25 22:14 问笑 阅读(358) 评论(0) 推荐(0)
摘要:前幾天逛msdn,看了一下關於window class的介紹,發現有些東西沒有注意到的,特此翻譯窗口類的類別:有三種——systemClasses、Application Global Classes、Application Local Classes這三種的不同在于作用域以及何時、如何注冊和銷毀方面。SysTemClasses所謂的SystemClasses,是指那些已經由windows預先注冊的類——windows標準控件的窗口類就是他們。由于是系統注冊了這些類,因此用戶無法銷毀他們。當一個進程的線程第一次開始呼叫GDI函數時,系統就會為這個進程注冊這些systemClasses。每個應用 阅读全文
posted @ 2013-08-25 21:45 问笑 阅读(204) 评论(0) 推荐(0)
摘要:1、MFC窗口如何与AfxWndProc建立联系。当一个新的CWnd派生类创建时,在调用CWnd::CreateEx()过程中,MFC都会安装AfxCbtFilterHook()。这个Hook将拦截HCBT_CREATEWND,将窗体的消息处理函数设置为AfxWndProc()。[cpp] view plaincopyprint?//wincore.cpp651 //CWnd::CreateEx函数通过AfxHookWindowCreate函数安插Hook BOOLCWnd::CreateEx(DWORDdwExStyle,LPCTSTRlpszClassName,LPCTSTRlpszWin 阅读全文
posted @ 2013-08-25 20:55 问笑 阅读(573) 评论(0) 推荐(0)
摘要:MFC(VC6.0)的CWnd及其子类中,有如下三个函数: classCWnd:publicCCmdTarget{public: virtualBOOLPreCreateWindow(CREATESTRUCT&cs);virtualvoidPreSubclassWindow();BOOLSubclassWindow(HWNDhWnd);}; 让人很不容易区分,不知道它们究竟干了些什么,在什么情况下要改写哪个函数? 想知道改写函数?让我先告诉你哪个不能改写,那就是SubclassWindow。Scott Meyers的杰作>的第36条是这样的Differentiate betwee 阅读全文
posted @ 2013-08-24 20:35 问笑 阅读(526) 评论(0) 推荐(0)
摘要:我们在调用CWnd::GetDlgItem()函数时,MSDN告诉我们:The returned pointer may be temporary and should not be stored for later use.中文意思就是:返回的指针可能是临时的并且最好不要保存起来放到以后用。猜测:返回的指针既然可能是临时的,那么可能是非临时的(永久的),最好不要保存起来放到以后用(有时候可以保存起来)源码面前,了无秘密。让我们深入MFC源代码去看个究竟。先随便建立一个Dialog程序,然后在窗体上拉一个按钮,添加按钮事件,在按钮事件里写上如下代码:GetDlgItem(IDC_BUTTON1 阅读全文
posted @ 2013-08-24 04:19 问笑 阅读(527) 评论(0) 推荐(0)
摘要:(1) 在CYournameView(就是你的视图类,以下以CDrawLineView为例)添加了一个背景颜色变量COLORREF m_bgcolor;(2)修改这个函数:BOOL CDrawLineView::PreCreateWindow(CREATESTRUCT& cs){// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT cs cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,0,(HBRUSH)::GetSto 阅读全文
posted @ 2013-08-23 23:42 问笑 阅读(1765) 评论(0) 推荐(0)
摘要:关于窗口重画的初级问题初初级问题:我在视图画的图象或者文字,当窗口改变后(包括最小化后还原,被别的窗口挡住后重新显示等)为什么不见了?这 就是窗口重绘或者说重画的问题。当窗口改变后,会产生无效区域,这个无效的区域需要重画。什么是无效区域?自己到网上搜索或者看相关资料。我这里给出一个 特殊的解释:以最小化后还原为例,假设只有一个程序在运行,窗口最小化时显示计算机桌面,并不妨假设桌面是蓝色的背景,当窗口还原时,窗口所占的这一块区 域该显示些什么东西呢?操作系统并不知道,因此,就形成一块无效区域。要是我们告诉操作系统,显示一个红方块,于是它就显示一个红方块,我们的程序过一会 想显示一个绿方块呢?同样 阅读全文
posted @ 2013-08-23 23:10 问笑 阅读(649) 评论(0) 推荐(0)
摘要:OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw中。OnPaint() 是CWnd的类成员,负责响应WM_PAINT消息。OnDraw()是CVIEW的成员函数,没有响应消息的功能.当视图变得无效时(包括大小的改变, 移动,被遮盖等等),Windows发送WM_PAINT消息。该视图的OnPaint 处理函数通过创建CPaintDC类的DC对象来响应该消息并调用视图的OnDraw成员函数.OnPaint最后也要调用OnDraw,因此一般在 OnDraw函数中进行绘制。The WM_PAINT message. 阅读全文
posted @ 2013-08-23 19:58 问笑 阅读(527) 评论(0) 推荐(0)
摘要:前言:我一直对DLL技术充满好奇,一方面是因为我对DLL的导入/导出机制还不是特别的了解,另一面是因为我发现:DLL技术在Windows平台下占有重要的地位,几乎所有的Win32 API都是以导出函数的形式存放于不同的DLL文件中,在DLL方面的学习是任何一个想深入研究Windows内部机制的Windows程序员都不可能回避的事实。我在查阅了大量的文章后,对DLL技术有了一定的了解,所以我写了这篇文章来总结和整理我的思路,也为以后深入的学习提供宝贵的资料。对于如何制作DLL,网上有很多资料,我这里就不多罗嗦了。现在假设我们已经成功生成了一个Win32 DLL,这个DLL的名字是DLLInDep 阅读全文
posted @ 2013-08-22 21:08 问笑 阅读(801) 评论(0) 推荐(0)
摘要:DB与DIB的区别是什么?觉得书上介绍的有点抽象、不容易理解。他们两者之间的区别的“物理意义” 【“现实意义”】——姑且这么叫吧,呵呵!被这个问题困扰了很久,所以今天决定好好查资料总结一下,把它彻底搞清楚,也希望能对那些和我一样有着困惑的你 起到一点帮助。转入正题:【与位图相关的基础概念:】DDB位图(Device-dependent Bitmap):设备相关位图,也有书上称为GDI位图(Graphic Device Interface—图形设备接口)。DIB位图(Device-independent Bitmap):设备无关位图。GDI位图是一种GDI对象,在MFC中用CBitmap类来表示 阅读全文
posted @ 2013-08-21 16:26 问笑 阅读(1503) 评论(1) 推荐(0)
摘要:http://www.czug.org/python/wxpythoninaction/ 阅读全文
posted @ 2013-08-20 21:25 问笑 阅读(193) 评论(0) 推荐(0)
摘要:这个是三部曲中我认为最难的,并不是说程序有多么难,只是想到这个切分方式真的不容易,今天就把这三部曲的最后一曲分享给大家,也为互联网做一点贡献。首先说一下程序的思想,为分割窗口层专门独立创建一个基于CFrameWnd的类,然后在这里面写分割视图的代码,再与其他未分割的视图类进行切换。下面我们来看一下实现的过程:1、创建一个基于CFrameWnd的派生类CSplitterFrame;2、添加要填充分割窗口的视图类和与分割视图切换的视图类;3、为这个派生类重载OnCreateClient函数,构造分割视图m_Splitter.CreateStatic(this,1,2);m_Splitter.Cre 阅读全文
posted @ 2013-08-20 19:24 问笑 阅读(936) 评论(0) 推荐(0)
摘要:一、C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对独立的,在编 译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链接(link)就行了。比如,在文件a.cpp中定义 了一个全局函数“void a() {}”,而在文 阅读全文
posted @ 2013-08-20 13:28 问笑 阅读(1026) 评论(0) 推荐(1)
摘要:stdafx全称Standard Application Fram Extend。没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。 Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示: 1. AppWizard建立了文件stdafx.h,该文件包含了所有当前工程文件需要MFCinclude 文件... 阅读全文
posted @ 2013-08-20 13:23 问笑 阅读(292) 评论(0) 推荐(0)
摘要:添加的函数:1HACCELhAccel;2hAccel=LoadAccelerators(AfxGetresourceHandle(),MAKEINRESOURCE(IDR_ACCELERATOR1));34BOOLCtestDlg::PreTanslateMessage(MSG*pMsg)5{6if(WM_KEYFIRSTmessage&&pMsg->messagemessage >= WM_KEYFIRST && pMsg->message message && pMsg->message <= WM_KEYLA 阅读全文
posted @ 2013-08-20 11:50 问笑 阅读(393) 评论(0) 推荐(0)
摘要:http://fuck.0day5.com/?p=563PHP突破Disable_functions执行Linux命令利用dl函数突破disable_functions执行命令http://www.xfocus.net/articles/200704/915.html编写PHP扩展三步曲http://blog.csdn.net/taft/article/details/596291http://blog.csdn.net/alexdream/article/details/2213344 阅读全文
posted @ 2013-08-18 23:29 问笑 阅读(873) 评论(0) 推荐(0)
摘要:一、坐标空间1、Win32应用程序设计接口(API)使用四种坐标空间:世界坐标系空间、页面空间、设备空间和物理设备空间。应用程序运用世界坐标系空间对图形输出进行旋转,斜切或者反射。2、Win32API把世界坐标系空间和页面空间称为逻辑空间,最后一种坐标空间(即物理设备空间)通常指应用程序窗口的客户区。但是它也包括整个桌面、完整的窗口(包括框架、标题栏和菜单栏)或打印机的一页或绘图仪的一页纸。物理设备的尺寸随显示器、打印机或绘图仪所设置的尺寸而变化。二、转换1、如要在物理设备上绘制输出,Windows把一个矩形区域从一个坐标空间拷贝到(或映射到)另一个坐标空间,直至最终完整的输出呈现在物理设备上 阅读全文
posted @ 2013-08-18 20:10 问笑 阅读(604) 评论(0) 推荐(0)
摘要:应该说 窗口坐标 是相对于 视口坐标 而言 逻辑坐标 是相对于 设备坐标 而言补充: 窗口坐标是基于逻辑坐标的. 视口坐标是基于设备坐标. 上面这两话是抄自百度百科的,我的理解是: 窗口坐标的单位长度与逻辑坐标的单位长度相同,也就是说,当你在窗口坐标上画图时,传递给画图函数的参数的单位是逻辑单位。但是当windows把图形输出到屏幕上时,并不是直接把图形按照它在窗口坐标上的位置输出到屏幕上的,而是先把它在窗口坐标上的值转换成视口坐标上的值(与此同时,也把逻辑坐标按照不同的映射模式转换成设备坐标)。下面举例说明: 由于 一般情况下,窗口原点是与视口原点相同的,(也就是说,位于屏幕上的同一个位置) 阅读全文
posted @ 2013-08-18 19:53 问笑 阅读(725) 评论(0) 推荐(0)
摘要:说起C++的模板及模板特化, 相信很多人都很熟悉 ,但是说到模板特化的几种类型,相信了解的人就不是很多。我这里归纳了针对一个模板参数的类模板特化的几种类型, 一是特化为绝对类型; 二是特化为引用,指针类型;三是特化为另外一个类模板。这里用一个简单的例子来说明这三种情况://generalversiontemplateclassCompare{public:staticboolIsEqual(constT&lh,constT&rh){returnlh==rh;}};这是一个用于比较的类模板,里面可以有多种用于比较的函数, 以IsEqual为例。一、特化为绝对类型也就是说直接为某个 阅读全文
posted @ 2013-08-18 13:02 问笑 阅读(590) 评论(0) 推荐(1)
摘要:在构造函数中,想知道这个类是否按期望那样是否构造成功,很多人是喜欢在构造失败情况下抛出一些异常。例:class A1{public:A1(){pI = new int;cout << "A1()" << endl; // something error;throw("A1 error");}~A1(){delete pI;cout << "~A1()" << endl;}private:int *pI;};int _tmain(int argc, _TCHAR* argv[]){A1 * 阅读全文
posted @ 2013-08-18 12:38 问笑 阅读(282) 评论(0) 推荐(0)
摘要:C++ 用异常使得可以将正常执行代码和出错处理区别开来。 比如一个栈,其为空时,调用其一个pop 函数,接下来怎么办? 栈本身并不知道该如何处理,需要通知给其调用者(caller),因为只有调用者清楚接下来该怎么做。 异常,就提供了一个很好机制。 但是异常需要操作系统,编译器,RTTI的特性支持。下面围绕一个问题 “为什么析构函数不能抛出异常?” 展开C++中异常的实现。Effective C++ 里面有一条”别让异常逃离析构函数“,大意说是Don't do that, otherwise the behavior is undefined. 这里讨论一下从异常的实现角度,讨论一下为什 阅读全文
posted @ 2013-08-18 12:30 问笑 阅读(451) 评论(0) 推荐(0)
摘要:智 能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是 使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数;调用析构函数时,构造函数减少. 阅读全文
posted @ 2013-08-18 12:12 问笑 阅读(270) 评论(0) 推荐(0)
摘要:一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、 boost::shared_ptr、boost::scoped_array、boost::shared_array、 boost::weak_ptr、boost:: intrusive_ptr。你可能会想,如此多的智能指针就为了解 阅读全文
posted @ 2013-08-18 11:41 问笑 阅读(204) 评论(0) 推荐(0)
摘要:auto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包 的智能指针,这个不怎么智能的智能指针难免会黯然失色。诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用”裸“指针那样非常小心的使 用它才能保证不出错,以至于它甚至无法适用于同是标准库中的那么多的容器和一些算法,但即使如此,我们仍然不能否认这个小小的auto_ptr所蕴含的价 值与理念。 auto_ptr的出现,主要是为了解决“被异常抛出时发生资源泄漏”的问题。即如果我们让资源在局部对象构造时分配,在局部对象析构时释放。这样即使在函数. 阅读全文
posted @ 2013-08-18 11:25 问笑 阅读(217) 评论(0) 推荐(0)
摘要:C++中指针申请和释放内存通常采用的方式是new和delete。然而标准C++中还有一个强大的模版类就是auto_ptr,它可以在你不用的时候自动帮你释放内存。下面简单说一下用法。[cpp] view plaincopy用法一:std::auto_ptrm_example(newMyClass());用法二:std::auto_ptrm_example;m_example.reset(newMyClass());用法三(指针的赋值操作):std::auto_ptrm_example1(newMyClass());std::auto_ptrm_example2(newMyClass());m_e 阅读全文
posted @ 2013-08-18 11:17 问笑 阅读(495) 评论(0) 推荐(0)
摘要:1、每个类必须有一个构造函数,否则没法创建对象; 2、若programer没有提供任何构造函数,则C++提供一个默认的构造函数,该默认构造函数是无参构造函数,它仅负责创建对象,不做任何初始化的工作; 3、只要programer定义了一个构造函数(不管是无参还是有参构造),C++就不再提供默认的默认构造函数。即如果为类定义了一个带参的构造函数,还想要无参构造函数,就必须自己定义; 4、与变量定义类似,在用默认构造函数创建对象时,如果创建的是全局对象或静态对象,则对象的位模式全为0,否则,对象值是随机的。 注:2所述,C++在某些情况下会提供默认构造函数,但在某些情况下并不会自动调用。 实事上,当 阅读全文
posted @ 2013-08-18 11:07 问笑 阅读(735) 评论(0) 推荐(0)
摘要:代码审核文件 plugins\phpdisk_client\passport.php1234567891011121314151617181920$str = $_SERVER['QUERY_STRING'];if($str){parse_str(base64_decode($str));// 触发函数}else{exit('Error Param');}/*$username = trim(gpc('username','G',''));$password = trim(gpc('password' 阅读全文
posted @ 2013-08-18 09:45 问笑 阅读(465) 评论(0) 推荐(0)
摘要:#include "stdafx.h"#include "stdio.h"/* 冒泡排序日期:2013月8月18IDE:VC6.0*/void Sort(int arr[],int n){ int tmp; for(int i=0; i<n; i++) { for(int j=1; j<n-i; j++) { if ( arr[j] < arr[j-1] ) { tmp = arr[j-1]; arr[j-1] = arr[j]; ... 阅读全文
posted @ 2013-08-18 09:12 问笑 阅读(134) 评论(0) 推荐(0)
摘要:1.友元函数的简单介绍1.1为什么要使用友元函数在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。实际上具体大概有下面两种情况需要使用友元函数:(1)运算符重载的某些场合需要使用友元。(2)两个类要共享数据的时候。1.2使用友元函数的优缺点1.2.1优点:能够提高效率,表达简单、清晰。1.2.2缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用 阅读全文
posted @ 2013-08-17 16:17 问笑 阅读(221) 评论(0) 推荐(0)
摘要:闭包这个概念在很多语言中都有涉及,本文主要谈谈python中的闭包。Python中使用闭包主要是在进行函数式开发时使用。一,定义python中的闭包从表现形式上定义(解释)为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).这个定义是相对直白的,好理解的,不像其他定义那样学究味道十足(那些学究味道重的解释,在对一个名词的解释过程中又充满了一堆让人抓狂的其他陌生名词,不适合初学者)。下面举一个简单的例子来说明。[python] view plaincopy>>>defaddx(x):>>> 阅读全文
posted @ 2013-08-16 17:44 问笑 阅读(419) 评论(0) 推荐(0)
摘要:C++局部类和嵌套类的区别 局部类 在一个函数体内定义的类称为局部类。局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关。局部类不能被外部所继承。在定义局部类时需要注意:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内。在实践中,局部类是很少使用的。下面是一个局部类的例子。 inta; voidfun() { staticints; classA { public: voidinit(inti){s=i;} }; Am; m.init(10); }局部类的另一个用途是用来实现类型转化,如下代码:cl... 阅读全文
posted @ 2013-08-16 16:26 问笑 阅读(304) 评论(0) 推荐(0)