windows sdk编程系列文章10 ---- 内存管理和文件输入输出.doc

windows sdk编程系列文章10 ---- 内存管理和文件输入输出.doc

ID:52199638

大小:56.00 KB

页数:12页

时间:2020-03-24

windows sdk编程系列文章10 ---- 内存管理和文件输入输出.doc_第1页
windows sdk编程系列文章10 ---- 内存管理和文件输入输出.doc_第2页
windows sdk编程系列文章10 ---- 内存管理和文件输入输出.doc_第3页
windows sdk编程系列文章10 ---- 内存管理和文件输入输出.doc_第4页
windows sdk编程系列文章10 ---- 内存管理和文件输入输出.doc_第5页
资源描述:

《windows sdk编程系列文章10 ---- 内存管理和文件输入输出.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、windowssdk编程系列文章----内存管理和文件输入输出2008-04-1223:35本课中我们将学习基本的内存管理和文件输入/输出操作方面的知识。另外我们还将用上节课学的通用对话框作为我们的显示“设备”。理论:从用户的角度来看,WIN32的内存管理是非常简单和明了的。每一个应用程序都有自己独立的4G地址空间,这种内存模式叫做“平坦”型地址模式,所有的段寄存器或描述符都指向同样的起始地址,所有的地址偏移都是32位的长度,这样一个应用程序无须变换选择符就可以存取自己的多达4G的地址空间。这种内存管理模式是非常简洁而便于管理的,而且我们再不用和那些令人讨厌的

2、“near”和“far”指针打交道了。在Win16下有两种主要类型的API:全局和局部。“全局”的API分配在其他的段中,这样从内存角度来看他们是一些“far”(远)函数或者叫远过程调用,“局部”API只要和进程的堆打交道,所以把它们叫做“near”(近)函数或者近过程调用。而在WIN32中,这两种内存模式是相同的,无论您调用GlobalAlloc还是LocalAlloc,结果都是一样。至于分配和使用内存的过程都是一样的:1.调用GlobalAlloc函数分配一块内存,该函数会返回分配的内存句柄。2.调用GlobalLock函数锁定内存块,该函数接受一个内存句

3、柄作为参数,然后返回一个指向被锁定的内存块的指针。3.您可以用该指针来读写内存。4.调用GlobalUnlock函数来解锁先前被锁定的内存,该函数使得指向内存块的指针无效。5.调用GlobalFree函数来释放内存块。您必须传给该函数一个内存句柄。在WIN32中您也可以用“Local”替代内存分配API函数带有“Global”字样的函数中的“Global”,也即用LocalAlloc、LocalLock等。在调用函数GlobalAlloc时使用GMEM_FIXED标志位可以更进一步简化操作。使用了该标志后,Global/LocalAlloc返回的是指向已分配内

4、存的指针而不是句柄,这样也就不用调用Global/LocalLock来锁定内存了,释放内存时只要直接调用Global/LocalFree就可以了。不过在本课中我们只使用传统的方法,因为其它地方有许多的源代码是用这种方法写的。WIN32的文件输入/输出API和DOS下的从外表上看几乎一样,不同的只是把DOS下的中断方式处理文件输入/输出变成了对API函数的调用。以下是基本的步骤:1.调用CreateFile函数生成一个文件,该函数可以应用在多方面,除了磁盘文件外,我们还可以用来打开通讯端口、管道、驱动程序或控制台。如果成功的话,会返回指向文件或设备的句柄。然后可

5、以使用该句柄去完成对文件或设备操作。1.调用SetFilePointer来把文件指针移到想读写的地方。.2.然后调用ReadFile或WriteFile来完成实际的读写。这些函数会自己处理文件和内存之间的数据传送,这样免得您自己去做分配内存等繁杂的琐事。3.调用CloseHandle来关闭文件。该函数接受一个先前打开的文件句柄。例子:见光盘FirstWindow10下面的代码段演示了:打开一个“打开文件”对话框,用户可以选择打开一个文本文件,然后在一个编辑控件中打开该文本文件的内容,另外用户还可以编辑该文本文件的内容并选择保存。#include"Windows

6、.h"#include"tchar.h"TCHARClassName[]=_T("Win32EditClass");TCHARAppName[]=_T("Win32Edit");TCHARMenuName[]=_T("FirstMenu");TCHAREditClass[]=_T("edit");HINSTANCEg_hInstance;#defineIDM_OPEN1#defineIDM_SAVE2#defineIDM_EXIT3#defineMAXSIZE260#defineMEMSIZE65535#defineEditID  1OPENFILENAMEg

7、_ofn;TCHARFilterString[]=_T("AllFiles*.*TextFiles*.txt");TCHARbuffer[MAXSIZE];HWNDhwndEdit;HANDLEhFile;HANDLEhMemory;VOID*pMemory;DWORDSizeReadWrite;INT_PTRCALLBACKProcWinMain(  HWNDhWnd,                      UINTMsg,                      WPARAMwParam,                      L

8、PARAMlParam){   swi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。