
扫盲区
文章平均质量分 55
xd1103121507
这个作者很懒,什么都没留下…
展开
-
字符编码笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian
字符编码笔记:ASCII,Unicode和UTF-8作者: 阮一峰 版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 最后修改时间:2007年10月29日 09:46 转自:http://witmax.cn/character-encoding-notes.html今天中午,我突然想搞清楚Unico转载 2013-04-25 16:26:19 · 1015 阅读 · 0 评论 -
核心对象
核心对象:是系统的一种资源,系统对象一旦产生,任何应用程序都可以开启并使用该对象。系统给核心对象一个计数值作为管理之用。核心对象的产生方式不同,都会获得一个handle作为识别,每被使用一次,其对应的计数值加1.核心对象的结束方式相当一致,调用closehandle即可。核心对象的种类:eventmutexsemaphorefilefile-mappingproce原创 2012-02-15 22:09:23 · 502 阅读 · 0 评论 -
winsock,ws2_32,WinInet,WinHttp对比
在Windows平台进行网络程序开发, 可以使用不同的库, 但是最常用的还是微软自己开发的库。具体说来,有:(1)Winsock,工作于网络层和传输层的开发库,对于编写TCP,UDP,以及原始IP通信程序非常合适。函数原形也基本符合Unix socket标准。Windows平台上的大多数程序,如QQ,讯雷等都基于其开发。(2)ws2_32,是Winsock的升级版本,在兼容的基础上增加了不转载 2012-02-27 22:28:04 · 740 阅读 · 0 评论 -
inline函数
一、在C&C++中 一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为什么要取代这种形式呢,且听我道来: 1. 首先谈一下在C中使用这种形式宏定义的原因,转载 2012-02-26 18:47:00 · 302 阅读 · 0 评论 -
RTTI
百科名片RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。编辑本段RTTI介绍 RTTI提供了以下两个非常有用的操作符: (1)typeid操作符,返回指针和引用所指的实际类型; (2)dynamic_cast操作符,将基类类型的转载 2012-02-17 11:28:53 · 422 阅读 · 0 评论 -
c++对象切割(Object Slicing)
当把一个派生类对象赋给一个基类对象时,会发生对象切割。(另外用基类对象强制转换派生类对象也会)对象切割会发生什么呢?#include using namespace std;class CShape{public: CShape () { m_color=0; }转载 2012-02-17 10:35:14 · 5233 阅读 · 0 评论 -
模板的声明和实现为何要放在头文件中?
源: http://blog.youkuaiyun.com/lqk1985/archive/2008/10/24/3136364.aspx如何组织编写模板程序 发表日期: 1/21/2003 12:28:58 PM 发表人: Nemanja Trifunovic前言常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”。看看我们几乎每天都能转载 2012-02-25 22:19:52 · 808 阅读 · 0 评论 -
模板函数与函数模板
1.函数指针——指针函数 函数指针的重点是指针。表示的是一个指针,它指向的是一个函数,例子: int (*pf)(); 指针函数的重点是函数。表示的是一个函数,它的返回值是指针。例子: int* fun(); 2.数组指针——指针数组 数组指针的重点是指针。表示的是一个指针,它指向的是一个数组,例子: int (*pa转载 2012-02-25 20:45:47 · 407 阅读 · 0 评论 -
基类派生类转换问题
派生类的对象都含有基类对象作为其一部分,我们可以将指向派生类型的引用转换为指向它的基类型的引用,像转换指针一样,我们可以用派生类的对象初始化或赋值基类对象,反之却不行。class base{public:};class derived:public base{public:};int main(void) { derived obj_d; base ob转载 2012-02-17 09:46:05 · 937 阅读 · 0 评论 -
C++类型转换总结
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a。C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。const_cast,字面上理解就是去const属性。static_cast,命名上理解是静态类型转换。如int转换成char。dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类转载 2012-02-16 22:43:05 · 321 阅读 · 0 评论 -
一些代码
1.将二进制的EXE加载第一步:将要加载的应用程序导入到工程中,并设置类型为EXE类型第二步: HRSRC hRes; hRes=FindResource(NULL,MAKEINTRESOURCE(IDR_EXE1),"EXE"); HGLOBAL hgRes; hgRes=LoadResource(NULL,hRes); void *pvoid=LockRe原创 2012-02-23 22:42:40 · 324 阅读 · 0 评论 -
程序在内存中运行的奥秘
内存管理是操作系统的核心功能,无论对于开发者还是系统管理员内存管理的重要性都是不言而喻的。我会在接下来的几篇文章通过计算机的实际运行过程谈谈内存管理,当然在必要的时候我也会从底层原理去阐释这个问题。我们提到的概念是不局限于平台特性的通用概念,不过为了阐述这些概念我们选取的实例大多来源于Linux和基于x86架构的32位Windows操作系统。这篇文章,我们首先来看看程序是如何使用内存的。多任务转载 2012-02-23 20:48:45 · 398 阅读 · 0 评论 -
关于winapi和CALLBACK,_stdcall _cdecl _pascal等的分析与归纳理解
WINAPI和CALLBACK这两个宏有什么区别呢?_stdcall _cdecl _pascal _fastcall这些关键字是什么意思,有什么区别呢? 首先看MSDN里给出的解释,不过有些语焉不详哦WINAPI ·Use in place of FAR PASCAL in API declarations. If you are writing a DLL with exp转载 2012-02-20 09:24:58 · 686 阅读 · 0 评论 -
CreateThread,_beginthread,_beginthreadx的区别
首先要澄清一个问题,那就是CreateThread是Windows的API函数,而_beginthread和_beginthreadex则是CRT库函数,查看这两个CRT函数的代码可以得知其实它们内部是调用的CreateThread(这很显然嘛,CRT库也是要运行在Windows上)。这两个CRT函数与CreateThread有什么区别呢?区别在于这两个CRT函数针对其它CRT库函数,特别是那转载 2012-02-20 10:22:40 · 378 阅读 · 0 评论 -
Visual c++网络通信编程笔记
1 . winsock有两个版本是winsock1.1和winsock2.02. CAsyncSocket和CSocket是MFC类库中的两个类,CAsyncSocket是CSocket的父类。3. winsock属于传输层也网络层4. 学会使用这一技巧struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4;原创 2012-02-27 21:23:55 · 686 阅读 · 0 评论 -
VS2010 Boost编译安装
1.下载安装包boost 1_46_0 http://www.boost.org/users/news/version_1_46_0选择下载 windows 或 unix 版本2.解压缩到D:\boost 目录下3.编译bjam (1)从vs2010的工具菜单进入命令提示窗口(单击“开始”按钮,指向“所有程序”,指向“Microsoft Visual Studio 2010原创 2013-04-02 17:54:42 · 757 阅读 · 0 评论 -
C++的几种学习工具和编译器
C++的几种学习工具和编译器首先:语言上,你选择的 C++ ,这点应该可以确定其次,界面库的选择,你在犹豫 MFC 还是 Qt ?再次,IDE的选择上,你在犹豫 Visual Studio 还是 QtCreator ?假定,你界面库选择 Qt,IDE选择了 QtCreator?那么你面临编译器的选择(准备在QtCreator下用哪个编译器来编译你的程序): 微软的M转载 2013-02-24 18:17:00 · 1010 阅读 · 0 评论 -
Effective C++ 学习笔记(六)
条款41:了解隐式接口和编译器多态(1)classes和template都支持接口和多态,对class而言接口是显式的,以函数签名为中心,多态则是通过virtual函数发生于运行期,对template参数而言,接口是隐式的,奠基于有效表达式,多态则是通过template具现化和函数重载解析发生于编译器。条款42:了解typename的双重意义(1)typename和class在temp原创 2013-01-02 22:06:40 · 349 阅读 · 0 评论 -
Effective C++ 学习笔记(五)
条款32:确定你的public继承塑模出is-a关系(1)public继承意味is-a,适用于base class身上的每一件事情一定也适用于derived classes身上,因为每一个devided class对象也是一个base class对象,但是每一个适用于devided class对象身上的每一件事情并不一定适用于base class。条款33:避免遮掩继承而来的名称(1)原创 2012-12-31 16:17:42 · 448 阅读 · 0 评论 -
Effective C++学习笔记(一)
1.条款02 尽量以const ,enum,inline代替#define (1) 尽量用const或者enum代替#define。原因是:#define不做类型检查,并且#define不在编译器登记,所以在调试的时候不方便。用const可以达到同样的效果,并且还能 做 类型检 查。而且#define不能有private这样的限定,不能进行封装。同样也可以使用原创 2012-12-03 18:23:57 · 942 阅读 · 0 评论 -
如何在android模拟器中安装并运行已经开发好的或者别人写好的apk文件 .
在网上,想必有很多开发好的android程序,如果你想运行别人的程序,或者说你下载了一些别人的apk文件,该如何运行呢,我觉得应该从以下几方面入手: 1.你得先下载并解压android SDK(类似与java的JDK,你可以理解为一个开发包),你可以解压到你想解压的任何地方。我以我的做法为例,我是把他压缩到我的F盘下; 2.增加系统变量SDK_ROOT,让她指向sdk之下 /tools转载 2012-03-06 22:39:02 · 949 阅读 · 0 评论 -
MDI程序与SDI程序的区别
多文档MDI应用程序和单文档SDI应用程序的主要不同在于:它支持多个文档、甚至多个文档类型。从用户的角度,他们有以下几点差别:(1) MDI允许用户同时打开多个文档,而SDI只能打开一个文档。(2) MDI应用程序甚至可以支持多种文档类型。例如word不仅支持.doc文件,还可以打开web页面文件.html等。(3) MDI应用程序通常包含一个windows菜单,可以转载 2012-02-21 12:34:19 · 1549 阅读 · 0 评论 -
CSocket 和CAsyncSocket类介绍
一、实现方法 微软的MFC把复杂的WinSock API函数封装到类里,这使得编写网络应用程序更容易。CAsyncSocket类逐个封装了WinSock API,为高级网络程序员提供了更加有力而灵活的方法。这个类基于程序员了解网络通讯的假设,目的是为了在MFC中使用WinSock,程序员有责任处理诸如阻塞、字节顺序和在Unicode与MBCS 间转换字符的任务。为了给程序员提供更方便的接口以自转载 2012-02-29 12:17:15 · 544 阅读 · 0 评论 -
Getbuffer ReleaseBuffer Cstring
getbuffer是为了让你使用CString类中,保存字符串缓冲区的那块指针. 至于releasebuffer,在MSDN中有这样一句话. If you use the pointer returned by GetBuffer to change the string contents, you must ca转载 2012-02-28 18:38:43 · 506 阅读 · 0 评论 -
LPCTSTR和GetBuffer与CString
传参数时不可以传CString ,CString 在ATL MFC中定义是不同的,而且在各个版本里也略有不同。注意。有两方法LPCTSTR和GetBuffer() 看看这个 LPCTSTR 与 GetBuffer(int nMinBufLength) 这两个函数提供了与标准C的兼容转换。在实际中使用频率很高,但却是最容易出错的地方。这两个转载 2012-02-28 18:39:13 · 1624 阅读 · 0 评论 -
Windows内存管理
本文主要内容:1.基本概念:物理内存、虚拟内存;物理地址、虚拟地址、逻辑地址;页目录,页表2.Windows内存管理3.CPU段式内存管理4.CPU页式内存管理 一、基本概念1. 两个内存概念物理内存:人尽皆知,就是插在主板上的内存条。他是固定的,内存条的容量多大,物理内存就有多大(集成显卡系统除外)。但是如果程序运行很多或者程序本身很大的话,就会导致大量的物理内存转载 2012-02-23 21:29:11 · 1915 阅读 · 0 评论 -
CString/string/char *比较详解
关键点:主要用于MFC的编写,而属于STL,两者都是符合标准C++的,但是在非 windows平台或者说VC上还是用吧。另外还有一个这是传统C++才有的~ (一) 概述 string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中; CString(typedef CStringT> CString)为Visu转载 2012-02-23 10:52:26 · 347 阅读 · 0 评论 -
#pragma INITCODE 是什么意思
#pragma INITCODE //将driverEntry设在分页内存中,当驱动加载成功,此函数在内存中移除。 PAGED_CODE();//当例程所在的中断请求级超过APC_LEVEL时,会产生一个断言,断言会使程序终止。原创 2011-12-09 22:55:27 · 1809 阅读 · 0 评论 -
WindowsNT设备驱动程序开发基础
一、背景介绍1.1WindowsNT操作系统的组成1.1.1用户模式(UserMode)与内核模式(KernelMode) 从Intel80386开始,出于安全性和稳定性的考虑,该系列的CPU可以运行于ring0~ring3从高到低四个不同的权限级,对数据也提供相应的四个保护级别。运行于较低级别的代码不能随意调用高级别的代码和访问较高级别的数据,而且也只有ring0层的代码可以直转载 2011-12-09 21:59:25 · 1245 阅读 · 0 评论 -
探索C++的秘密之详解extern "C"
时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一转载 2011-12-09 21:22:02 · 309 阅读 · 0 评论 -
合并模块和安装文件的区别
以前只是打包成MSI和EXE,今天用打包水晶报表用到合并模块,便查看了一下合并模块是什么意思。1、Windows Installer 用于在其他计算机上安装应用程序和文件,合并模块用于安装由多个应用程序共享的组件。2、应用程序的最终用户将直接使用的任何内容(可执行文件、文档、HTML 页)都应打包到 Windows Installer 中仅供开发人员使用的任何内容(DLL、控件原创 2011-12-07 18:49:43 · 409 阅读 · 0 评论 -
H-JTAG在NOR上烧写supervivi的步骤
1.安装H-JTAG后在setting->LPT JTAG setting中配置相应的引脚。2.在主界面中的init中选择init script中加载脚本文件。3.在主菜单中Flasher原创 2011-11-07 11:22:37 · 1133 阅读 · 0 评论 -
DDR SDRAM
人们习惯称为DDR,部分初学者也常看到DDR SDRAM,就认为是SDRAM。 DDR SDRAM是Double Data Rate SDRAM的缩写,是双倍速率同步动态随机存储器的意思。DDR内存是在SDRAM内存基础上发展而来的,仍然沿用SDRAM生产体系,因此对于内存厂商而言,只需对制造普通SDRAM的设备稍加改进,即可实现DDR内存的生产,可有效的降低成本。 SDRAM转载 2011-11-06 20:05:40 · 396 阅读 · 0 评论 -
nor flash 和nand flash
NOR FLASH 主要占据着1MB--16MB的市场,而NAND FLASH主要占据着大容量市场。由于NAND FLASH需要I/O接口,所以使用更加复杂。在使用NAND FLASH 器件时必须先写入驱动才能执行其他操作。另外NAND FALSH器件写入写入信息时需要相当的技巧,因为设计师绝不会向坏块写入,这就意味着NAND FLASH器件上至始至终都必须进行虚拟映射。原创 2011-11-06 19:54:40 · 328 阅读 · 0 评论 -
mini2440存储空间
S3C2440把低1G的空间分成了8块,由图可知,第0至6这七块的起始地址是不变的。而第七段的地址是可变的(它的地址有第六块需要用到多少来决定,反正就是第六第七是连在一起的)。前6块可以是ROM SRAM 。最后两块不但可以是ROM,SRAM外,还可以是SDRAM.其实啊,简单点的说,就是只有最后两块才能是SDRAM.也就是说SDRAM必须要映射到这两块里面.mini2440就是选择映射在第七块上转载 2011-11-06 18:43:47 · 675 阅读 · 0 评论 -
mini2440启动过程
ARM启动代码从系统上电开始接管CPU,依次需要负责初始化 CPU在各种模式下的堆栈空间、设定CPU的内存映射、对系统的各种控制寄存器做初始化、对CPU的外部存储器进行初始化、设定各外围设备的基地址、创建正确的中断向量表、为C代码执行创建ZI(零创建)区,然后进入到C代码。 在C代码中继续对时钟、RS232端口进行初始化,然后打开系统中断允许位。最后进入到应用代码中执行,执行期间响应各种不同的中断原创 2011-11-06 18:39:19 · 1585 阅读 · 0 评论 -
COM接口
定义COM接口是指Component Object Model接口,是微软定义的标准接口。简介串口叫做串行接口,现在的PC 一般有两个串行口COM 1 和COM 2 。串行口不同于并行口之处在于它的数据和控制信息是一位接一位地传送出去的。 虽然这样速度会慢一些,但传送距离较并行口更长,因此若要进行较长距离的通信时,应使用串行口。 通常 COM 1 使用的是9 针D 形连接器,也转载 2011-11-06 18:32:36 · 1059 阅读 · 0 评论 -
寄存器的使用规则
1. 子程序之间通过寄存器R0-R3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。此时R0-R3可记作A1-A4.2. 在子程序中,使用寄存器R4-R11保存局部变量。因此当进行子程序调用时要注意对这些寄存器的保存和恢复。此时R4-R11可记作V1-V8.3. 寄存器R12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作IP.4.转载 2011-11-06 18:41:44 · 1617 阅读 · 0 评论 -
调用约定(cdecl、fastcall、、thiscall)
在C语言中,假设我们有这样的一个函数:int function(int a,int b)调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参转载 2011-12-11 10:52:29 · 455 阅读 · 0 评论 -
#pragma once
#pragma once 只要在头文件的最开始加入这条指令就能够保证头文件被编译一次 #pragma once 用来防止某个头文件被多次include,#ifndef,#define,#endif用来防止某个宏被多次定义。原创 2011-12-09 21:14:36 · 267 阅读 · 0 评论