顿时能想到的函数有:
GetMem AllocMem ReallocMem FreeMem GetMemory ReallocMemory FreeMemory New Dispose NewStr DisposeStr StrNew StrAlloc StrDispose GlobalAllocPtr GlobalFreePtr WideStrAlloc AnsiStrAlloc StrDispose Move MoveMemory CopyMemory ZeroMemory FillMemory FillChar StrBufSize
给字符指针(PChar、PWideChar、PAnsiChar)分配内存, 最佳选择是: StrAlloc.
StrAlloc 虽然最终也是挪用了 GetMem, 但 StrAlloc 会在指针前面添加 Delphi 需要的 4 个打点字节(记录长度).
StrAlloc 分配的内存, 用 StrDispose 释放, 用 StrBufSize 获取巨细.
用 FreeMem 释放可以吗? 这样会少释放 4 个字节.
这种类型的指针一般用于 API 函数的参数, 譬如获取窗口标题:
StrAlloc 按照差此外参数(PWideChar、PAnsiChar)分袂重载挪用了 WideStrAlloc、AnsiStrAlloc, 所以我们也可以直接使用这两个函数(这也需要用 StrDispose 释放), 不过使用它们的须要性不大; 用 StrAlloc 指定好参数类型即可.
给字符指针分配内存其他要领也挺便利, 譬如:
数组的内存不是我们本身申请的, 系统会自动释放; 记住: 只要是手动申请的内存必然要手动释放.
我们给字符指针申请内存主要是为了在 API 中接受数据, 如果我们要直接赋给常量值, 系统会自动分配内存的, 譬如:
固然我们也可以用这种步伐申请内存, 就是笨了点, 譬如:
如果在 API 函数需要的字符指针是为了输入, 固然也不需要申请内存, 譬如:
跑题了...到此刻已用到了 StrAlloc、StrDispose、WideStrAlloc、AnsiStrAlloc、StrBufSize 几个函数.
还有 NewStr、DisposeStr、StrNew、StrDispose 也貌似有点关系.
先说 NewStr 和 DisposeStr(它们是一对);
NewStr 是按照 AnsiString 再新建一个 PAnsiString, 不过这是为兼容而存在的, Delphi 已不倡导使用了.
不再倡导使用的函数都缀以 deprecated 标识, 并在代码提示顶用灰色显示.
其实用 @ 即可获取字符串指针, 固然根柢用不着它们.
还有个 StrNew; StrNew 可以再制一个不异的字符指针, 譬如:
不过 StrNew 存在的意义也不大, 我们可以更简单地完成上面的操纵: