delphi 的内存操作函数

delphi 的内存操作函数

ID:16348352

大小:149.50 KB

页数:20页

时间:2018-08-09

delphi 的内存操作函数_第1页
delphi 的内存操作函数_第2页
delphi 的内存操作函数_第3页
delphi 的内存操作函数_第4页
delphi 的内存操作函数_第5页
资源描述:

《delphi 的内存操作函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Delphi的内存操作函数Delphi的内存操作函数(1):给字符指针分配内存马上能想到的函数有:GetMemAllocMemReallocMemFreeMemGetMemoryReallocMemoryFreeMemoryNewDisposeNewStrDisposeStrStrNewStrAllocStrDisposeGlobalAllocPtrGlobalFreePtrWideStrAllocAnsiStrAllocStrDisposeMoveMoveMemoryCopyMemoryZeroMemoryFillMemoryFill

2、CharStrBufSize给字符指针(PChar、PWideChar、PAnsiChar)分配内存,最佳选择是:StrAlloc.StrAlloc虽然最终也是调用了GetMem,但StrAlloc会在指针前面添加Delphi需要的4个管理字节(记录长度).StrAlloc分配的内存,用StrDispose释放,用StrBufSize获取大小.用FreeMem释放可以吗?这样会少释放4个字节.这种类型的指针一般用于API函数的参数,譬如获取窗口标题:var p:PChar;begin p:=StrAlloc(256); GetWindo

3、wText(Handle,p,StrBufSize(p)); ShowMessage(p);{Form1} StrDispose(p);end;StrAlloc根据不同的参数(PWideChar、PAnsiChar)分别重载调用了WideStrAlloc、AnsiStrAlloc,所以我们也可以直接使用这两个函数(这也需要用StrDispose释放),不过使用它们的必要性不大;用StrAlloc指定好参数类型即可.给字符指针分配内存其他方法也挺方便,譬如://获取WINDOWS所在目录var buf:array[0..MAX_PATH]

4、ofChar;begin GetWindowsDirectory(buf,Length(buf)); ShowMessage(buf);{C:WINDOWS}end;数组的内存不是我们自己申请的,系统会自动释放;记住:只要是手动申请的内存一定要手动释放.我们给字符指针申请内存主要是为了在API中接受数据,如果我们要直接赋给常量值,系统会自动分配内存的,譬如:var p:PChar;begin p:='万一的Delphi博客'; ShowMessage(p);{万一的Delphi博客}end;当然我们也可以用这种办法申请内存,就是笨了点

5、,譬如://获取系统目录var p:PChar;begin p:=PChar(StringOfChar(Char(0),256));{反复一个空字符256次成一个字符串,然后转为PChar} GetSystemDirectory(p,StrBufSize(p)); ShowMessage(p);{C:WINDOWSsystem32}end;如果在API函数需要的字符指针是为了输入,当然也不需要申请内存,譬如://设置窗口标题var p:PChar;begin p:='窗口新标题'; SetWindowText(Handle,p);e

6、nd;//也可以直接给常量begin MessageBox(Handle,'提示信息','标题',MB_OK);end;//如果是给字符串的变量或常量,则需要转换一下var str:string;begin str:='万一的Delphi博客'; TextOut(Canvas.Handle,10,10,PChar(str),Length(str)); {在窗体上输出文字,此代码不能在OnCreate事件中}end;跑题了...到现在已用到了StrAlloc、StrDispose、WideStrAlloc、AnsiStrAlloc、Str

7、BufSize几个函数.还有NewStr、DisposeStr、StrNew、StrDispose也貌似有点关系.先说NewStr和DisposeStr(它们是一对); NewStr是根据AnsiString再新建一个PAnsiString,不过这是为兼容而存在的,Delphi已不提倡使用了.不再提倡使用的函数都缀以deprecated标识,并在代码提示中用灰色显示.其实用@即可获取字符串指针,当然根本用不着它们.还有个StrNew;StrNew可以再制一个相同的字符指针,譬如:var p1,p2:PChar;begin p1:='De

8、lphi'; p2:=StrNew(p1); ShowMessageFmt('%s,%s',[p1,p2]);{Delphi,Delphi} p1:='2009'; ShowMessageFmt('%s,%

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

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

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