博文
[WinApi]MessageBox函数不工作的原因(2007-11-12 14:39:00)
摘要:[WinApi]MessageBox函数不工作的原因
学过API(windows C) 编程的人不防思考一下下面的MessageBox函数不能显示出对话框的原因 (我的实验平台:window 2000 profession + VC++6.0 )
#include <windows.h>
HINSTANCE ghInstance;
HWND ghMainWnd;
LPCTSTR lpszWndClassName=TEXT("myClass");
LPCTSTR lpszTitle=TEXT("myWindow");
// main window process
LRESULT CALLBACK MainWndProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam ){
PAINTSTRUCT ps;
HDC hdc;
switch(uMsg){
case WM_CREATE:
return 0;
case WM_PAINT:
return 0;
&nbs......
C++ bitset 类(2007-11-02 12:49:00)
摘要:有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了std::bitset的using声明:
#i nclude <bitset>
using std::bitset;
3.5.1 bitset的定义和初始化
表3-6列出了bitset的构造函数。类似于vector,bitset类是一种类模板;而与vector不一样的是bitset类型对象的区别仅在其长度而不在其类型。在定义bitset时,要明确bitset含有多少位,须在尖括号内给出它的长度值:
bitset<32> bitvec; //32位,全为0。
给出的长度值必须是常量表达式(2.7节)。正如这里给出的,长度值必须定义为整型字面值常量或是已用常量值初始化的整数类型的const对象。
这条语句把bitvec定义为含有32个位的bitset对象。和vector的元素一样,bitset中的位是没有命名的,程序员只能按位置来访问它们。位集合的位置编号从0开始,因此,bitvec的位序是从0到31。以0位开始的位串是低阶位(low-order bit),以31位结束的位串是高阶位(high-order bit)。
表3-6 初始化bitset对象的方法
bitset<n> b;
b有n位,每位都为0
bitset<n> b(u);
b是unsigned long型u的一个副本
bitset<n> b(s);
b是string对象s中含有的位串的副本
bitset<n> b(s, pos, n);
b是s中从位置pos开始的n个位的副本
1. 用unsigned值初始化bitset对象
当用unsigned long值作为bitset对象的初始值时,该值将转化为二进制的位模式。而bitset对象中的位集作为这种位模式的副本。如果bitset类型长度大于unsigned long值的二进制位数,则其余的高阶位置为......
解决VS2005无法调试的问题(2007-10-28 08:59:00)
摘要:
解决VS2005无法调试的问题
当我们试图在VS2005中调试源代码的时候常常出现上面的问题而无法调试,下面是解决方法:
一: 单击 项目- 》项目属性 (我这里是 test)
二:如下,在选择“调试信息格式”时有几个方法,这里我们选择和VC6下相同的方法“用于编辑并继续的程序库”表示我们修改源代码后仍可以继续调试,其它的方法大家可以自己去尝试。
三:将 “优化” 选项禁用(因为 二 里选择的是“编辑并继续”无法优化)
四:如下,在“生成调试信息”中确认选择了“ 是/DEBUG”
五: 重新生成解决方案
六: 进行调试,OK 了
......
C++ STL 之父访谈录(2007-10-26 12:08:00)
摘要:STL之父访谈录
1995年3月,Dr.Dobb's Journal特约记者, 著名技术书籍作家Al Stevens采访了STL创始人AlexanderStepanov. 这份访谈纪录是迄今为止对于STL发展历史的最完备介绍, 侯捷先生在他的STL有关文章里推荐大家阅读这篇文章. 因此我将该文全文翻译如下:
Q: 您对于generic programming进行了长时间的研究, 请就此谈谈.
A: 我开始考虑有关GP的问题是在7O年代末期, 当时我注意到有些算法并不依赖于数据结构的特定实现,而只是依赖于该结构的几个基本的语义属性. 于是我开始研究大量不同的算法,结果发现大部分算法可以用这种方法从特定实现中抽象出来, 而且效率无损. 对我来说,效率是至关重要的, 要是一种算法抽象在实例化会导致性能的下降, 那可不够棒.
当时我认为这项研究的正确方向是创造一种编程语言. 我和我的两个朋友一起开始干起来. 一个是现在的纽约州立大学教授Deepak Kapur, 另一个是伦塞里尔技术学院教授David Musser. 当时我们三个在通用电器公司研究中心工作. 我们开始设计一种叫Tecton的语言. 该语言有一种我们称为"通用结构"的东西, 其实不过是一些形式类型和属性的集合体, 人们可以用它来描述算法. 例如一些数学方面的结构允许人们在其上定义一个代数操作, 精化之,扩充之, 做各种各样的事.
虽然有很多有趣的创意, 最终该项研究没有取得任何实用成果, 因为Tecton语言是函数型
语言. 我们信奉Backus的理念,相信自己能把编程从von Neumann风格中解放出来. 我们
不想使用副效应, 这一点限制了我们的能力, 因为存在大量需要使用诸如"状态", "副效
应"等观念的算法.
我在70年代末期在Tecton上面所认识到了一个有趣的问题: 被广泛接受的ADT观念有着根本性的缺陷. 人们通常认为ADT的特点是只暴露对象行为特征, 而将实现隐藏起来. 一项操作的复杂度被认为......
中断向量表(2007-10-18 17:14:00)
摘要:
80x86中断向量
I/O ADDR
INT TYPE
FUNCTION
00 ~ 03
0
除法溢出中断
04 ~ 07
1
单步(用于DEBUG)
08 ~ 0B
2
非屏蔽中断(NMI)
0C ~ 0F
3
断点中断(用于DEBUG)
10 ~ 13
4
溢出中断
14 ~ 17
5
打印屏幕
18 ~ 1F
6,7
保留
8259中断向量
I/O ADDR
INT TYPE
FUNCTION
20 ~ 23
8
定时器 (IRQ0)
24 ~ 27
9
键盘 (IRQ1)
28 ~ 2B
A
彩色/图形 (IRQ2)
2C ~ 2F
B
串行通信COM2 (IRQ3)
30 ~ 33
C
串行通信COM1 (IRQ4)
34 ~ 37
D
LPT2控制器中断 (IRQ5)
38 ~ 3B
E
磁盘控制器中断 (IRQ6)
3C ~ 3F
F
LPT1控制器中断 (IRQ7)
BIOS中断向量
I/O ADDR
INT TYPE
FUNCTION
40 ~43
10
视频显示 I/O
44 ~ 47
11
设备检验
48 ~ 4B
12
测定存储器容量
4C ~ 4F
13
磁盘 I/O
50 ~ 53
14
RS-232 串行口 I/O
54 ~ 57
15
系统描述表指针
58 ~ 5B
16
键盘 I/O
5C ~ 5F
17
打印机 I/O
60 ~ 63
18
ROM BASIC 入口代码
64 ~ 67
19
引导装入程序
68 ~ 6B
1A
日时钟
提供给用户的中断
I/O ADDR
INT TYPE
FUNCTION
6C ~ 6F
1B
Ctrl - Break 控制的软中断
70 ~ 73
1C
定时器控制的软中断
参数表指针
I/O ADDR
INT TYPE
FUNCTION
74 ~ 77
1D
视频参数块......
硬盘分区表(2007-10-18 17:13:00)
摘要:
磁头(Head)/盘面(Side) 柱面(Cylinder)/磁道(Track) 扇区(Sector)
硬盘主引导扇区 = 硬盘主引导记录(MBR) + 硬盘分区表(DPT)
用FDISK 进行硬盘分区时产生的, 它属于整个硬盘而不属于某个独立的DOS 分区, 是硬盘正确引导和使用的必要条件.
物理位置:0柱面0磁头1扇区(Cylinder 0, Head 0, Sector 1)
系统扇区(System Secotrs): 0C-0H-2S,0C-0H-63S,共 62 Sectors
大小:512字节
其中:MBR 446字节(0000--01BD),DPT 64字节(01BE--01FD),结束标志2字节(55 AA)
功能:MBR通过检查DPT分区信息引导系统跳转至DBR
详解: (DEBUG -A: MOV AX,0201 MOV BX,0200 MOV CX,0001 MOV DX,0080 INT 13)
000H--08AH
MBR启动程序(寻找开机分区)
08BH--0D9H
MBR启动字符串
0DAH--1BCH
保留( "0 ")
1BEH--1FDH
硬盘分区表
1FEH--1FFH
结束标志(55AA)
硬盘分区表(DPT)
偏移地址
字节数
含义分析
01BE
1
分区类型:00表示非活动分区;80表示活动分区;其他为无效分区
01BF ~ 01C......
debug 命令(2007-10-18 17:11:00)
摘要:
调试程序DEBUG的特点:
在受控环境中测试程序;
装入,显示或修改任何文件;
执行DOS程序;
完成磁盘实际读/写操作;
建立或汇编汇编语言程序。
DEBUG的命令格式: DEBUG [drive:][path][filename][.ext][param...]
其中:
drive: 是DEBUG将要调试的文件所在的磁盘驱动器。
path: 是查找DEBUG将要调试的文件所需的子目录路径,若未指定,DOS使用当前目录。
filename[.ext] 是DEBUG将要调试的文件名。
param 是将被调试的程序(或文件)的命令行参数。
附:
DEBUG所完成的初始化动作,假定文件名没有,启动DEBUG:
段寄存器CS、DS、ES和SS置为DEBUG程序后的第一个段。
指令指针寄存器IP置为100H(程序段前缀PSP后的第一个语句)。
堆栈指针SP置为段末或COMMAND.COM暂驻部分的结束地址(其中较小的那个地址)。
其余通用寄存器均置为0,标志寄存器置为下述状态: NV UP EI PL NE NA PO NC。
如果DEBUG命令行含有文件名,段寄存器DS和ES指向PSP。寄存器BX和CX......
808x汇编指令(2007-10-04 09:46:00)
摘要:一、数据传输指令
───────────────────────────────────────
它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
1. 通用数据传送指令.
MOV 传送字或字节.
MOVSX 先符号扩展,再传送.
MOVZX 先零扩展,再传送.
PUSH 把字压入堆栈.
POP 把字弹出堆栈.
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.
BSWAP 交换32位寄存器里字节的顺序
......
关于嵌入式系统开发(2007-09-23 15:11:00)
摘要:嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3 Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(Set Top Box)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。
嵌入式系统是软硬结合的东西,搞嵌入式开发的人有两类。
一类是学电子工程、通信工程等偏硬件专业出身的人,他们主要是搞硬件设计,有时要开发一些与硬件关系最密切的最底层软件,如BootLoader、Board Support Package(像PC的BIOS一样,往下驱动硬件,往上支持操作系统),最初级的硬件驱动程序等。他们的优势是对硬件原理非常清楚,不足是他们更擅长定义各种硬件接口,但对复杂软件系统往往力不从心(例如嵌入式操作系统原理和复杂应用软件等)。
另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。如果我们学软件的人对硬件原理和接口有较好的掌握,我们完全也可写BSP和硬件驱动程序。嵌入式硬件设计完后,各种功能就全靠软件来实现了,嵌入式设备的增值很大程度上取决于嵌入式软件,这占了嵌入式系统的最主要工作(目前有很多公司将硬件设计包给了专门的硬件公司,稍复杂的硬件都交给台湾或国外公司设计,国内的硬件设计力量很弱,很多嵌入式公司自己只负责开发软件,因为公司都知道,嵌入式产品的差异很大程度在软件上,在软件方面是最有"花头"可做的),所以我们搞软件的人完全不用担心我们在嵌入式市场上的用武之地,越是智能设备越是复杂系统,软件越起关键作用,而且这是目前的趋势。
从事嵌入式软件开发的好处是:
(1) 目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件(例如操作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业IT人员很难切入......
什么是 .Net(2007-09-08 16:11:00)
摘要:/// 该文系网络转载
什么是.NET,以及.NET的影响
总是听人说.NET,但是具体是什么,指得是什么还是一头雾水,今天无意之中看到了这样的文章感觉他的解释还算不错,让大伙看一下吧!
.NET是什么,如何影响我?
一直以来就不断有人问我这个问题,我的回答总是随着时间的流逝而改变:最早我告诉他们这是一个新的平台,后来告诉他们这是Microsoft的一个新战略,但是现在我想我会这样回答:.NET是一个概念,是一种构想,或者是微软的一个梦想?
[b]对于Microsoft .NET,微软官方有如下描述:
“.NET 是 Microsoft 的用以创建 XML Web 服务(下一代软件)平台,该平台将信息、设备和人以一种统一的、个性化的方式联系起来。”
“借助于 .NET 平台,可以创建和使用基于 XML 的应用程序、进程和 Web 站点以及服务,它们之间可以按设计、在任何平台或智能设备上共享和组合信息与功能,以向单位和个人提供定制好的解决方案。”
“.NET 是一个全面的产品家族,它建立在行业标准和 Internet 标准之上,提供开发(工具)、管理(服务器)、使用(构造块服务和智能客户端)以及 XML Web 服务体验(丰富的用户体验)。.NET 将成为您今天正在使用的 Microsoft 应用程序、工具和服务器的一部分,同时,新产品不断扩展 XML Web 的服务能力以满足您的所有业务需求。” [/b]
这个美国时间2000年6月22日上午面世的新概念一经发布就引起了全球IT界的关注,因为发布它的微软公司向以改变业界的游戏规则而闻名,该公司另一个出名的地方就是精通“拿来主义”,善于继承别人的思想再经过封装变成自己的产品。在.NET的新产品中,VS.NET有Delphi的影子,C#更宛若JAVA的一个clone,甚至.NET的“网络计算”的概念也曾经在很早以前由SUN提出过。但是这并不能妨碍.NET成为去年最热门的技术词汇,随着VS.NET和Windows.net的发布,它还会成为今年人们谈论最多的话题之一。
发布.NET之后,盖茨说,网络将由呈现式的平台转为完全的平台。
在微软的Win......