自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

asp缓存类

'********************************************** ' vbs Cache类 ' ' 属性valid,是否可用,取值前判断 ' 属性name,cache名,新建对象后赋值 ' 方法add(值,到期时间),设置cache内容 ' 属性value,返回cache内容 ' 属性blempty,是否未设置值 ' 方法makeEmpty,释放内存,测试用 ' ...

2007-07-31 12:06:00 106

Windows API一日一练(19)DestroyWindow函数

以前已经介绍过直接点击关闭按钮来关闭应用程序,但想删除一个窗口对象,需要用到什么函数的呢?比如创建了30个窗口,想把第12个窗口关闭删除掉,那就需要使用函数DestroyWindow。当调用DestroyWindow函数后,操作系统就会进行一系列的删除动作,先发送WM_DESTROY消息,接着发送WM_NCDESTROY消息。如果这个窗口还有子窗口或者是其它窗口的所有者,就需要给所有子窗口发送删...

2007-07-31 08:10:00 84

Windows API一日一练(18)EndDialog函数

上一次介绍了怎么样显示对话框的函数,那么怎么样关闭对话框呢?这就需要使用到函数EndDialog。这个函数只能在对话框的消息处理函数里使用,并且这个函数调用之后,没有立即就删除对话框的,而是设置了操作系统里的结束标志。当操作系统查检到有这个标志时,就去删除对话框的消息循环,同时也去释放对话框占用的资源。其实对话框的生命周期是这样的,先由函数DialogBox创建对话框,这样函数DialogBox...

2007-07-30 08:34:00 121

LCC编译器的源程序分析(60)代码表的结构

在LCC里使用代码表来表示代码块,前端把所有代码属性放到代码表里,后端根据代码表来生成代码,它的结构如下:#001//代码表结构定义.#002//蔡军生 2007/07/27#003struct code#004{#005 //代码表的类型.#006 enum KindType#007 {#008 Blockbeg, //块的开始.#009 Blockend, ...

2007-07-27 23:10:00 130

Windows API一日一练(17)DialogBox和DialogBoxParam函数

对话框是比较常用的窗口,比如当你想让用户输入一些参数时就可以使用对话框。或者提示一些警告的信息,都是可以使用对话框的。比如当你拷贝文件时,Windows就会提示一个拷贝文件的进度对话框。对话框的使用范围比较广,并且它在设计时就可以看到运行的结果模样,这样方便设计。但对话框又分为两类,一种对话框运行后,一定要用户关闭那个对话框后才能返回到父窗口;一种对话框是不需要关闭后就可以直接返回父窗口。因此,...

2007-07-27 08:41:00 122

Windows API一日一练(16)BeginPaint和EndPaint函数

当人们使用软件时,大多数是想看到自己所需要的结果,比如玩RPG游戏,就是想看到自己所操作的主角做各种各样的事情。在2D的RPG游戏里,其实做的事情,就是不断地更新画面,也就是不断地显示BMP的图片。在普通的程序里,大多也是显示各种文本和图片的,但是有一种类型的应用程序是不怎么显示结果的,那就是服务程序。不管怎么样,只要我们想看到程序所执行后的结果,就需要在程序里显示出来。也就是需要调用Begin...

2007-07-26 08:38:00 86

Windows API一日一练(15)PostQuitMessage函数

自然界面里,各种生物都是有其生命周期的。程序也是有其生命周期的,创建时就是它出生了,当它运行工作中就是成年期,最后少不了要死亡的,那么程序的死亡是怎么样出现的呢?像以前介绍函数GetMessage里是使用一个循环不断地检测消息,周止复始的,是不可能出现死亡的,但它会检测到消息WM_QUIT就退出来。那现在问题是谁发送WM_QUIT消息出来呢?这就是PostQuitMessage函数所做的工作。当...

2007-07-25 08:27:00 64

Windows API一日一练(14)DispatchMessage函数

前面已经介绍从系统队列里获取一条消息,然后经过快捷键的函数检查,又通过字符消息函数的转换,最后要做的事情就是调用DispatchMessage函数,它的意思就是说要把这条消息发送到窗口里的消息处理函数WindowProc。函数DispatchMessage声明如下:WINUSERAPILRESULTWINAPIDispatchMessageA( __in CON...

2007-07-24 08:38:00 106

Windows API一日一练(13)TranslateMessage函数

TranslateMessage是用来把虚拟键消息转换为字符消息。由于Windows对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。TranslateMessage函数用于将虚拟键消息转换为字符消息。字符消息被投递到调用线程的消息队列中,当下一次调用GetMessage函数时被取出。当我们敲击键盘上的某个字符键时,系统将产生WM_KEY...

2007-07-23 08:41:00 60

LCC编译器的源程序分析(59)代码生成的源程序注释

下面详细地注释了gen.c的源程序,这样看起来就比较容易理解,希望对你有所帮助。#001#include "c.h"#002#003static char rcsid[] = "$Id: gen.c 355 2007-02-18 22:08:49Z drh $";#004#005#define readsreg(p) /#006 (generic((p)->op)==...

2007-07-22 17:18:00 129

LCC编译器的源程序分析(58)后端使用的节点结构

在LCC编译器后端,主要使用下面的节点结构来标识代码属性。#001#002//节点注释的扩展,主要是代码生成使用。#003//#004//蔡军生2007/07/21QQ: 9073204#005//#006typedef struct {#007 unsigned listed:1; //标记这是树的根节点。#008 unsigned registered:1; /...

2007-07-21 21:29:00 90

Windows API一日一练(12)TranslateAccelerator函数

当应用程序运行时,用户按下快捷键,这样就产生了一个按键消息,那么Windows是怎么样把它转化为快捷键响应的消息呢?这就需要使用TranslateAccelerator函数。TranslateAccelerator函数主要的作用就是把消息跟快捷键表里定义的按键进行比较,如果发现有快捷键,就会把这个按键消息转换为WM_COMMAND或者WM_SYSCOMMAND消息给窗口的消息处理函数发送过去。...

2007-07-21 08:30:00 180

LCC编译器的源程序分析(57)不同目标代码生成的接口结构

LCC为了生成不同机器的目标代码,它提供了一个接口给后端的代码生成,以便可以只修改后端,就可以达到生成不同的机器代码。它的接口如下:#001//后端代码生成接口,可以写生成不同的目标代码。#002//#003//蔡军生2007/07/20QQ: 9073204#004//#005typedef struct {#006 //对齐方式的最大字节。#007 unsigned...

2007-07-20 21:00:00 118

Windows API一日一练(11)GetMessage函数

应用程序为了获取源源不断的消息,就需要调用函数GetMessage来实现,因为所有在窗口上的输入消息,都会放到应用程序的消息队列里,然后再发送给窗口回调函数处理。函数GetMessage声明如下:WINUSERAPIBOOLWINAPIGetMessageA( __out LPMSG lpMsg, __in_opt HWND hWnd, __in UINT ...

2007-07-20 08:51:00 111

Windows API一日一练(10)LoadAccelerators函数

当用户使用软件时,往往有些功能是最常用的功能。作为开发人员,就需要让用户感觉到这个软件好用,这样就需要把他们最常用的功能用起来最方便,最快捷,能提高生产效率。在这方面,微软是做到家了,比如在键盘上有一个Windows键,Windows很多功能都可以通过这个键与其它键来组合成快捷键,提高使用的方便性。现在就来介绍一下怎么样让你的程序也方便使用,就是使用快捷键。函数LoadAccelerat...

2007-07-19 08:41:00 85

LCC编译器的源程序分析(56)寄存器分配的属性结构

现在详细地分析寄存器分配的属性结构,它的定义如下:#001typedef struct {#002 Symbol vbl; //保存变量符号,而不是临时变量.#003 short set; //寄存器类型,比如整数,或者浮点数。#004 short number; //寄存器编号。#005 unsigned mask; //寄存器字节大小,比如EAX,还是AX。#006} ...

2007-07-17 22:15:00 55

IIS 6 出于安全考虑, 默认最大请求200K do what?

IIS 6 出于安全考虑, 默认最大请求200K(也即最大提交数据限额为200KByte, 204800Byte).   解决办法:   1. 关闭 IIS Admin Service 服务   2. 打开 /Windows/system32/inesrv/metabase.xml   3. 修改 ASPMaxRequestEntityAllowed 的值为自己需要的, 默认为...

2007-07-17 21:52:00 80

Windows API一日一练(9)WindowProc和DefWindowProc函数

在Windows操作系统里,当窗口显示之后,它就可以接收到系统源源不断地发过来的消息,然后窗口就需要处理这些消息,因此就需要一个函数来处理这些消息。在API里定义了一个函数为回调函数,当系统需要向窗口发送消息时,就会调用窗口给出的回调函数WindowProc,如果WindowProc函数不处理这个消息,就可以把它转向DefWindowProc函数来处理,这是系统的默认消息处理函数。当你按下菜单,...

2007-07-17 08:52:00 78

LCC编译器的源程序分析(55)最终代码的生成

上次已经说明了怎么样选择合适的指令,现在就来介绍生成最终的代码,如下:#010mov dword [ebp + -12], 1其实生成上面的代码是通过后面的语句来构造出来的,它的过程如下:ASGNI4(ADDRLP4(nTest1), CNSTI4(1))stmt: ASGNI4(addr,rc) / mov dword %0, %1addr: base / [%0]bas...

2007-07-16 21:41:00 160

Windows API一日一练(8)UpdateWindow函数

UpdateWindow函数是更新窗口的客户区,主要通过发送WM_PAINT消息来实现的。函数声明如下:WINUSERAPIBOOLWINAPIUpdateWindow( __in HWND hWnd);hWnd是要更新窗口客户区的窗口句柄。调用这个函数的实例如下:#001BOOL InitInstance(HINSTANCE hInstance...

2007-07-16 08:49:00 72

LCC编译器的源程序分析(54)指令模式匹配

在LCC编译器里,先把下面的语句翻译成中间表示,int nTest1 = 1;其中间表示的树如下:ASGNI4(ADDRLP4(nTest1), CNSTI4(1))然后根据上述的中间表示进行指令模式匹配。下面的函数_label就是进行这样的工作:#001static void _label(NODEPTR_TYPE a) {#002int c;#003st...

2007-07-14 19:29:00 87

Windows API一日一练(7)ShowWindow函数

ShowWindow的API函数是显示窗口,但它在第一次调用和以后的调用是有区别的。第一次调用时,它的输入参数nCmdShow是需要输入WinMain函数里传入来的nCmdShow参数,而不能是其它参数。函数声明如下:WINUSERAPIBOOLWINAPIShowWindow( __in HWND hWnd, __in int nCmdShow);hWn...

2007-07-14 08:53:00 83

Windows API一日一练(6)CreateWindow函数

一个窗口要显示,先要把它创建出来。那就需要调用API函数CreateWindow了,所以在注册窗口后的第二步,就需要调用创建窗口函数。函数声明如下:WINUSERAPIHWNDWINAPICreateWindowExA( __in DWORD dwExStyle, __in_opt LPCSTR lpClassName, __in_opt LPCSTR lp...

2007-07-13 09:20:00 154

Windows API一日一练(5)RegisterClass和RegisterClassEx函数

为了可以创建自己的窗口,就需要向Windows操作系统注册窗口类型,以便后面创建窗口时调用。当然,如果使用Windows预先注册的窗口是不需要注册的。函数声明如下:#if(WINVER >= 0x0400)WINUSERAPIATOMWINAPIRegisterClassExA( __in CONST WNDCLASSEXA *);WINUSERAPI...

2007-07-12 09:23:00 79

LCC编译器的源程序分析(53)指令的选择

像下面的语句:int nTest1 = 1;选择什么样的汇编指令生成的呢?又是怎么样去选择指令的呢?在本例子里,LCC是选择下面的指令生成的:#010mov dword [ebp + -12], 1现在就来分析选择指令过程的代码,先分析函数gen的代码:#001Node gen(Node forest) {#002int i;#003struct node ...

2007-07-11 19:57:00 113

LCC编译器的源程序分析(52)寄存器溢出

当寄存器分配完了,但又有一些指令需要寄存器,那么就需要把占用寄存器的值保存到内存里,才可以重新分配那些寄存器。下面就来分析LCC的寄存溢出算法。spillee是用来计算那个寄存器最好保存到内存里,然后重新使用的。它的代码如下:#001static Symbol spillee(Symbol set, unsigned mask[], Node here) {#002Symbol...

2007-07-09 21:30:00 133

Windows API一日一练(4)MessageBox函数

为了显示提示信息给用户,Windows是提供了一个非常方便的API函数MessageBox给用户使用,使用这个API函数可以显示简单的文字信息出来,提醒或提示用户进行下一步操作。函数声明如下:WINUSERAPIintWINAPIMessageBoxA( __in_opt HWND hWnd, __in_opt LPCSTR lpText, __in_opt L...

2007-07-09 13:10:00 71

LCC编译器的源程序分析(51) 分配一个寄存器

分配一个寄存器的函数是ralloc,它会调用getreg函数来获取一个寄存器。下面先来分析函数ralloc的代码,如下:#001static void ralloc(Node p) {#002int i;#003unsigned mask[2];#004#005mask[0] = tmask[0];#006mask[1] = tmask[1];#007assert(...

2007-07-06 21:17:00 67

Windows API一日一练(3)使用命令行参数

下面再接着练习使用命令行参数,先在VC2005调试设置里设置输入参数,如下图:可以看到在Command Arguments里输入给程序传送的命令行参数(cmd1 cmd2 命令行参数)。接着修改原来的程序如下:#001int APIENTRY _tWinMain(HINSTANCE hInstance,#002 HINSTANCE hPrevInstance,#00...

2007-07-06 12:41:00 128

LCC编译器的源程序分析(50) 分配一个寄存器

在代码生成的函数gencode里,需要产生寄存器给临时变量使用。下面就来分析这段代码,如下:#056 case Gen: case Jump:#057 case Label: #058 if (prunetemps)#059 cp->u.forest = prune(cp->u.forest);#060 fixup(cp->u.forest);#061 c...

2007-07-04 21:16:00 63

用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联

message: 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。这个问题该如何解决?=============一.控制面板-》服务-》MS SQL SERVER-》登陆--》本地系统帐户--》重新启动MS SQL SERVER用windows验证登陆查询分析器--》执行 sp_password null,sa新密码,'sa'二."无法连接到服务器,用户xxx登陆...

2007-07-04 16:02:00 120

LCC编译器的源程序分析(49) 寄存器分配

前面已经说到要分配寄存器,下面就来分析寄存器分配的函数askreg。#001static Symbol askreg(Symbol rs, unsigned rmask[]) {#002int i;#003#004if (rs->x.wildcard == NULL)#005 return askfixedreg(rs);#006for (i = 31; i &g...

2007-07-03 21:37:00 149

Windows API一日一练(2)使用应用程序句柄

从上面这段程序就可以看到,_tWinMain是应用程序的入口函数,这里是使用它的宏,定义在tchar.h头文件里,为什么要这样作宏定义的呢?由于Windows的应用程序要适应UNICODE和以前单字符的应用程序,由于Windows这两个API的定义是不一样的,如下:UNICODE的定义:#define _tWinMain wWinMain单字符的定义:#define _tW...

2007-07-03 16:06:00 69

Windows API一日一练(1)第一个应用程序

要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们。现在就来编写一个最简单的Windows应用程序,让它提示一行文字给我们看到,这就是简单的目标。它实现的源程序和界面如下:<shapetype id="_x0000_t75" stroked="f" fill...

2007-07-02 14:47:00 76

LCC编译器的源程序分析(48) 寄存器分配

在LCC里是使用非常简单的寄存器分配算法,并且局限于森林里的临时变量的分配。下面就来分析寄存器分配的代码:#001int askregvar(Symbol p, Symbol regs) {#002Symbol r;#003#004assert(p);#005if (p->sclass != REGISTER)#006 return 0;#007else if...

2007-07-01 12:49:00 84

空空如也

空空如也

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

TA关注的人

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