2012年2月14日
摘要: 第一课:Windows 是多任务的操作系统, 一个任务就是一个应用(应用程序)、一个应用占一个进程; 在一个进程里面, 又可以运行多个线程(所以就有了很多"多线程编程"的话题).对 Win32 来讲, 系统给每个进程 4GB 的地址空间:低端 2GB($00000000 - $7FFFFFFF) 给用户支配;高端 2GB($80000000 - $FFFFFFFF) 留给系统使用.文件或程序要调入内存才能工作, 先看看我们的内存到底有多大吧.在系统盘根目录下有个 pagefile.sys 文件, 这就是我们的 "虚拟内存"(虚拟内存是以文件的形式存在的) 阅读全文
posted @ 2012-02-14 18:48 为人民服务 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 在函数、过程或者方法中定义一个字符串变量时,由于我们知道在函数、过程或者方法中定义的变量为局部变量,它的内存是在栈中分配的,但是这里有个小细节我们要注意,对于一个局部的字符串变量,它的大小为4字节,这个在栈中分配的4字节是不是就是字符串变量的全部呢?答案是否定的,它在栈中保存的只是这个字符变量的大小和字符变量的值在堆中的内存地址!,这就是说,该字符变量的值并不在对应的栈中,而是在堆中!我们了解到在堆上分配的内存是要程序员来处理内存释放的,而我们在使用String类型的变量时从来就没有处理过该变量占用的内存!这是什么原因呢?这里我们就要讲到编译器的引用计数原理了,正是因为它为我们省去了很多麻烦( 阅读全文
posted @ 2012-02-14 18:41 为人民服务 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 试试这个吧 //获得缺省打印机的状态 var pinfo: pPRINTERINFO2; pprt,a: Cardinal; b:PDWORD; begin b:=allocmem(256); pinfo:=AllocMem(1000); if OpenPrinter('HP DJ 200',pprt,nil) then begin a:=1000; if getprinter(pprt,2,pinfo,a,b) then showmessage(pinfo.pPrinterName+' ststus:'+inttostr(pinfo.Status)); Clo 阅读全文
posted @ 2012-02-14 08:44 为人民服务 阅读(1401) 评论(0) 推荐(0) 编辑