自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (1)
  • 收藏
  • 关注

原创 windows I/O完成端口

Windows  I/O完成端口                                                                                 一.  基本概念:         设备---windows操作系统上允许通信的任何东西,比如文件、目录、串行口、并行口、邮件槽、命名管道、无名管道、套接字、控制台、逻辑磁盘、物理磁盘等

2013-12-26 17:11:05 1073

转载 详解Windows消息分类以及WM_COMMAND与WM_NOTIFY的区别,以及模拟发送控件通知消息

转自:http://blog.sina.com.cn/s/blog_4b3c1f950100nten.htmlWindows消息的分类1. 标准消息(队列消息)  除WM_COMMAND之外,所有以WM_开头的消息都是标准消息,如WM_MOUSEMOVE、WM_LBUTTONUP、WM_KEYDOWN、WM_CHAR。     从CWnd派生的类都可以接收到这类消息。 

2013-12-26 14:32:38 6170

转载 C++11右值引用

C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。       对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值。左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法是

2013-09-10 16:46:16 709

转载 delphi 中Code Editor的使用

Delphi Code Editor有几个特性在编写大规模代码时非常有用。下面分别进行介绍:1、Code Templates(代码模板)使用代码模板可把任意预定义代码(或正文)插入到单元文件中。当在Code Editor中编辑代码时,按下键盘的【Ctrl + J】,就可使用代码模板;此时会弹出一个列表框,其中列出了可供选择的模板。从列表中选取一个模板,按下Enter键,与所选模板相对应的正

2013-08-04 16:07:34 851

原创 HOOK API技术

HOOK APIHOOK API 是指截获特定进程或系统对某个API函数的调用,使得API的指定流程转向指定的代码。截获API使得用户有机会干预其他应用程序流程。最常用的一种挂钩API的方法是改变目标进程中调用API函数的代码,使得它们对API的调用变为对用户自定义函数的调用。实现原理:1.在挂钩API之前,必须将一个可以替代API执行的函数的代码注入到目标进程中。一般称这个自定义

2013-07-02 20:04:05 1613

原创 windows钩子

钩子的概念:钩子:是windows消息处理机制中的一个监视点,应用程序可以在这里安装一个子程序(钩子函数)以监视指定窗口某种类型的消息。钩子函数:是一个处理消息的程序段,通过调用相关的API函数(SetWindowsHookEx()),把他挂入系统,每当特定的消息发出,当没有到达目的窗口前,钩子程序就先捕获该消息,这时,钩子函数既可以加工处理该消息,也可以不作处理而继续传递该消息。钩子

2013-07-01 11:53:27 1043 1

转载 调用约定

调用约定在windows平台上的C++编程中经常会看到一些__stdcall, __cdecl, WINAPI, CALLBACK等等关键字在函数前面,在.NET中还有__clrcall, __thiscall等关键字,有时加不加它们都可以,但是有时必须加上,不然编译不过。本文要讨论的就是这些关键字:调用约定(Calling Convention),有时也叫做“函数调用约定”或者“调用规范”。

2013-06-30 14:32:37 550

原创 windows中动态链接库的创建

windows中动态链接库的创建创建动态链接库工程:我使用的vs20101. 创建win32项目,(我们命名为DllDemo)2.在应用程序类型中选择DLL动态链接库的入口点DllMain (在dllmain.cpp文件中):DllMain函数。库的入口函数仅供操作系统使用,Windows在库装载、卸载、进程中线程创建和结束时调用入口函数,以便动态链接库可以采取相应的动作。DllM

2013-06-26 19:02:09 1114

原创 各种字符串以及它们之间的转换

字符串定义C-Style字符串:C程序语言本身原并不支援字串数据结构。字符串通常以一个字符数组(或称阵列)或一个指向字符资料的指标指标来表达。由于C语言的数组不包含其长度的资讯,故亦无法表示所载之字符串之长度。C语言社群对此通用之解决方案为于字符串末端增添一数值0的字符。C语言的标准程序库中的字符串处理功能亦以此为基础。C-Style 字符串特点为不直接包含长度资讯。要取得字符串之长度,就

2013-06-26 11:49:42 847

转载 ARM协处理器指令

ARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令。ARM 的协处理器指令主要用于 ARM 处理器初始化 ARM 协处理器的数据处理操作,以及在ARM 处理器的寄存器和协处理器的寄存器之间传送数据,和在 ARM 协处理器的寄存器和存储器之间传送数据。 ARM 协处理器指令包括以下 5

2013-06-17 09:31:54 520

转载 嵌入式系统 Boot Loader 技术内幕

1. 引言在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系统和建立于 F

2013-06-16 23:00:35 454

转载 ARM汇编伪指令

ARM汇编伪指令ARM 汇编程序的由机器指令,伪指令和宏指令组成。伪指令不像机器指令那样在处理器运行期间由机器执行,而是汇编程序对源程序汇编期间由汇编程序处理。在前面的指令集章节中,我们已经接触了几条常用到的伪指令,如ADR 、ADRL、LDR、NOP 等,把它们和指令集一起介绍是因为它们在汇编时会被合适的机器指令代替,实现真正机器指令操作。宏是一段独立的程序代码,它是通过伪指令定义的,在程序

2013-06-16 16:23:27 2485

转载 ARM中LTORG的使用

看了arm汇编语言语法一个多月了。总算入门了。当然还有很多东西值得继续努力推敲滴。 最近对LDR与LTORG有了一些新的认识。 LDR是一个比较复制的指令。作用是从存储器到寄存器的单一数据读取指令。它有19条指令格式。其中有两条格式为宏指令(macro),格式如下:1,LDRRd,2,LDR            Rd,= 这里重点分析下第二条宏指令。它会被编译

2013-06-16 15:48:08 4575

转载 ARM中的协处理器

ARM中的协处理器--介绍分类: LINUXARM 微处理器可支持多达 16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略 ARM 处理器和其他协处理器的指令。ARM 的协处理器指令主要用于 ARM 处理器初始化 ARM 协处理器的数据处理操作,以及在ARM 处理器的寄存器和协处理器的寄存器之间传送数据,和在 ARM

2013-06-16 15:25:00 583

转载 printf用法详解

虽然C语言已经用了好多年,但是真正一些细微的东西还是要经常翻书才能记得清楚。在google叔叔上了找了几分钟没找到需要的知识,结果同事^_^在百度百科一下就找到了,嗯,看来评价一个东西还是要具体情况具体分析,不能妄下定论。printf()函数  printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出   信息。在编写程序时经常会用到此函数。函数的原型为:  i

2013-06-11 15:32:22 1099

原创 ARM体系结构与编程

ARM体系结构与编程ARM7TMDI是目前使用最广泛的32位嵌入式处理器,属低端ARM处理器核TDMI的基本含义为T:支持16位压缩指令集ThumbD:支持片上DebugM:内嵌硬件乘法器(Multiplier)I:嵌入式ICE,支持片上断点和调试点流水线支持:ARM7 - 3级, ARM9 - 5级,  ARM10 - 6级,  ARM11 - 8级。ARM7TD

2013-06-10 22:10:09 2013

转载 冯诺依曼和哈佛体系结构的区别

冯诺依曼体系结构与哈弗体系结构的区别材料一:哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。

2013-06-10 09:33:29 1664

原创 DSP课程笔记

数字信号处理信号:信号是信息的载体,以某种函数的形式传递信息。这个函数可以是时间域、频率域或其它域,但最基础的域是时域。信号的分类:    周期信号 / 非周期信号    确定信号 / 随机信号    能量信号 / 功率信号    连续时间信号 / 离散时间信号 / 数字信号1-D 信号:单个独立变量的一维函数, e.g. 语音信号。2-D 信号:两个独立变

2013-06-07 00:42:48 2981

原创 MFC中的对话框

对话框对话框的种类: 模态对话框和非模态对话框, 都有一个相应的基类:CDialog模态对话框的创建:dlg.DoModal();非模态对话框的创建: Create(); 另外还需要ShowWindow(SW_SHOW)显式对话框。模态对话框中的ID值为IDOK的按钮按下后,会调用基类(CDialog)中的OnOKnow函数,这是一个虚函数,然后它又调用EndDialog函数;

2013-06-03 00:09:46 592

原创 基于ARM+linux的嵌入式系统设计

嵌入式系统的定义IEEE的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”一般定义:以应用为中心,以计算机技术为基础,其软硬件可配置,对功能、可靠性、成本、体积、功耗有严格约束的一种专用系统,所用的计算机称为嵌入式计算机。嵌入式系统与PC相比具有的特点:嵌入式系统的开发模式嵌入式系统的软件使用交叉开发平台进行开发。-系统软件和应用软件在主机开发平

2013-05-28 23:10:58 1923

原创 框架中的窗口

CWnd类 (CWnd 类是类库的核心)在类的体系结构中,框架程序提供了CWnd类来封装窗口的HWND句柄,即使用CWnd类来管理窗口的对象,这包括窗口的创建和销毁、窗口的一般行为和窗口所接收的消息。CCmdTarget类:为了使其它的类也有处理消息的机会,我们封装一个类CCmdTarget作为消息处理的终点,即所有从这个类派生的类都有处理消息的能力。所有有消息处理能力的类都要

2013-05-17 18:01:16 544

原创 框架程序基础

框架程序的状态信息对于应用程序来说,有许多的状态需要维护:如模块状态、线程状态等。模块的概念:每一个被加载到内存中的文件成为一个模块。一般进程是由多个模块组成的,通常应用程序都是通过模块句柄来访问进程中的模块。事实上,模块的句柄的值就是该模块映射到进程中的地址。模块 - 线程状态:AFX_MODULE_THREAD_STATE模块状态: AFX_MODULE_STATE线程

2013-05-17 14:52:33 664

原创 动态类型识别和动态创建

运行时类信息 (CRuntimeClass 类)动态类型识别(Runtime Type Infomation, RTTI):在程序运行的过程中辨别对象是否属于特定类的技术。动态创建:如果为每个类都写一个创建该类的全局函数的话,就能够依靠从文件或用户的输入中取得此函数的内存地址,从而创建用户动态指定的类。一个类支持运行期识别能力需要两个条件:1.含有一个CRuntimeClass

2013-05-17 13:47:09 813

原创 windows图像界面

了解窗口每个GUI应用程序至少创建一个窗口,称为主窗口,它作为用户与应用程序间的主要界面来提供服务。应用程序的主窗口包括标题栏、菜单来、windows系统菜单、最小和最大化按钮、关闭按钮、可改变大小的边框、垂直和水平滚动条。应用程序必须提供一个称为窗口函数的回调函数来处理窗口的输入,向客户区显示输出。win32工程程序的入口函数:int APIENTER WinMain(HIN

2013-05-17 11:20:54 695

原创 win32程序的执行单元

win32程序的执行单元代码的执行单元 ---- 线程CreateProcess函数创建了进程,同时也创建了进程的主线程。系统中的每个进程都至少有一个线程。多线程创建新的线程函数:CreateThread()等待线程运行结束:WaitForSingleObject(), 该函数用于等待指定对象变成受信状态。一个可执行对象有两种状态:未受信和受信状态。线程对象只有当线程运行结

2013-05-16 22:38:04 592

原创 win32程序运行原理

win32程序运行原理cpu的保护模式和windows系统80386处理器有3种工作模式:实模式、保护模式、虚拟86模式。实模式和虚拟86模式是为了8086处理器兼容而设置的。保护模式是80386处理器的主要工作模式,保护主要是对存储器的保护,windows操作系统就运行在此模式下。CPU在保护模式下支持虚拟存储,即虚拟内存。进程的地址空间:分为用户空间和系统空间。用户空间

2013-05-16 21:35:01 816

原创 set集合容器自定义比较函数

set中自定义比较函数使用insert()将元素插入到集合中去的时候,集合会根据设定的比较函数将该元素放到该放的节点上去。在定义集合的时候,如果没有指定比较函数,那么采用默认的比较函数(按键值又小到大的顺序插入元素)。编写比较函数的两张方法:1.如果元素不是结构体,那么可以编写比较函数。#include #include #include using namespace

2013-05-06 16:30:58 13303 2

原创 string对象与数值相互转换

#include #include #include using namespace std;//将数值转换为stringstring convertToString(double x){ ostringstream o; if(o << x) return o.str(); return "error!";}//将string转换为数值double convertF

2013-05-06 15:23:31 486

原创 函数对象

函数对象\函数对象有三种类型:关系、逻辑、运算。为使用函数对象,应包含头文件。想了解C++中定义的函数对象,看这个链接:http://msdn.microsoft.com/zh-cn/library/vstudio/86ke4swd.aspx1.关系类型的函数对象:equal_to               测试是否相等not_equal_to        测试是否不相等

2013-05-06 11:26:45 645

原创 STL算法

STL算法STL提供了大概80种算法,可以分为4类:1.非修改性算法:这类算法不改变容器中的内容,只是从容器获取信息。2.修改性算法:  这类算法通过插入、删除、重排等操作改变容器包含的元素,以及修改元素的值。3.数值算法: 数值算法提供了4种数值操作,用具计算累计、临差、部分和、内积。 4.堆算法: 堆算法提供了4种操作,用于创建堆、从堆中删除元素、向堆中插入元素、排序堆。

2013-05-05 15:43:42 583

原创 greater<int>()和less<int>()的使用

greater和lessgreater和less是头文件中定义的两个结构。下面看它们 的定义,greater和less都重载了操作符()。 // TEMPLATE STRUCT greatertemplate struct greater : public binary_function { // functor for operator> bool operator()(c

2013-05-05 12:00:03 32597 3

原创 C++STL学习笔记

C++STL泛型编程ANSI C++中包含了一个C++ STL(Standard Template Library),即C++标准模板库,又称C++泛型库,它在std命名空间中定义了常用的数据结构和算法,使用起来很方便。STL提供三种类型的组件:容器、迭代器、算法,它们都支持泛型程序设计标准。容器主要有两类:顺序容器和关联容器。顺序容器和关联容器又称为一级容器。顺序容器:顺

2013-05-03 23:24:42 922

原创 二进制文件的IO操作

二进制文件的IO操作习惯上,把非文本文件叫做二进制文件,实际上,所有的文件都是按照二进制存储 的。文本文件中存放的大部分是可见字符,加上少许控制字符;而二进制文件则可以包含任何字符和数据。二进制文件的输入输出不能用插入和提取操作符(>操作符)来实现,因为它们是为文本文件准备的。 对于二进制文件,必须使用read()和write()函数来读取和写入。创建一个二进制文件:ofstr

2013-05-03 15:59:49 2018

原创 获取文件信息

获取文件信息C++标准库提供了对文件内容处理的支持,但并不直接对文件基本信息的获取和修改。所以,获取文件的基本可以借助于C库中定义的结构和函数。在头文件中,定义了一个结构stat,它是用来描述文件元数据结构的。其定义如下:struct stat { _dev_t st_dev; _ino_t st_ino; uns

2013-05-03 14:42:58 789

原创 流类库与输入输出

IO流输入输出(IO)是指计算机同任何外部设备之间的数据传递。数据可以按“记录”(或称“数据块”)的方式传递,也可以按“流”的方式传递。什么是记录?记录是指有着内部结构的数据块,记录内部除了有需要处理的实际数据之外,还可能包含附加信息,这些附加信息通常是对本记录数据的描述。什么是流? “流”是一种抽象概念,它代表了数据的“无结构化”传递。按流的方式进行输入输出,数据被当成无

2013-05-03 13:49:55 1093

原创 typename的用法

typename的用法很多人都会以为typename和class的作用是一样的,事实不然,typename还有另外一个用途:将某个带作用域的标识符显式地说明为类型,这在类型之间具有依赖关系的情况下是经常要用到的。不好理解,先看个例子再说:#include using namespace std;template class TypeClass{public: ty

2013-05-03 00:11:13 751

原创 bitset的用法

bitsetbitset是C++标准库提供的用于处理位集的类模板,所谓”位集“,就是指由0和1组成的有限长度的有序集,也称为“标志位”集合。使用bitset类,必须包含相关的头文件 #include using std::bitsetbitset有几种形式的构造函数,由于bitset是一个类模板,所以在使用bitset的时候,必须对其实例化。bitset类模板只带一个非类型参

2013-05-02 23:35:40 514

原创 输入输出迭代子的用法

输入输出迭代子可以将标准输入对象cin组装成输入流迭代子(istream_iterator),也可以将标准输出对象组装成输出流迭代子(ostream_iterator),以此来完成输入输出的操作。输入流迭代器:定义方法:istream_iterator 迭代器名(绑定的流); //可以先不绑定流例如:std::istream_iterator inputInt(cin);

2013-05-02 23:08:27 1070

原创 模板与标准模板库

模板参数模板参数分为类型参数和非类型参数。类型参数代表的是一个基本类型或用户自定义的类型,而非类型参数代表一个常量。每个参数前面都必须有关键字typename或者class,形式为或。一个模板的非类型参数为文字常量的例子:#include using namespace std;//T 是类型参数, Size是非类型参数template class Average{

2013-05-02 17:52:00 531

原创 C++虚函数与动态联编

虚调用的几种具体情形虚调用是相对于实调用而言的,它的本质是动态联编(后面我们会讲到)。实调用:在发生函数调用的时候,如果函数的地址是在编译阶段确定的,就是实调用。反之,函数的入口地址要在运行时通过查询虚函数表的方式获得,就是虚调用。虚调用不能简单理解为"对虚函数的调用", 因为对虚函数的调用很可能是实调用。下面这个程序,对虚函数的调用就是实调用#include usi

2013-04-30 21:58:56 3219

winPcap4.1.1

winPcap4.1.1, 完全支持win7, 官网下载:http://www.winpcap.org/install/default.htm

2013-12-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除