BufferAlloc

分配一块内存并将其返回到缓冲对象中.

Buffer := BufferAlloc(ByteCount , FillByte)

参数

ByteCount

类型: 整数

要分配的字节数. 对应于 Buffer.Size.

FillByte

类型: 整数

指定一个介于 0 到 255 之间的数字, 以将缓冲中的每个字节设置为该数字.

在不需要先读取缓冲而直接写入的情况下, 通常应将其省略, 因为它的时间开销与字节数成正比. 如果省略, 则不初始化缓冲的内存; 每个字节的值是任意的.

返回值

返回值是一个新的缓冲对象.

备注

如果无法分配内存, 则抛出 MemoryError, 如 ByteCount 意外地大或系统虚拟内存不足.

缓冲对象, DllCall, NumPut, NumGet, StrPut, StrGet, File.RawRead, File.RawWrite

示例

通过 DllCall 使用 Buffer 从外部函数接收字符串.

max_chars := 11

; 为 wsprintf 的 Unicode 版本分配一个缓冲.
bufW := BufferAlloc(max_chars*2)

; 使用 wsprintfW() 将一个 UTF-16 字符串打印到缓冲中.
DllCall("wsprintfW", "Ptr", bufW, "Str", "0x%08x", "UInt", 4919, "CDecl")

; 从 bufW 中检索字符串并显示出来.
MsgBox StrGet(bufW, "UTF-16")  ; 或者直接 StrGet(bufW).

; 分配一个缓冲区供 ANSI 版本的 wsprintf 使用.
bufA := BufferAlloc(max_chars)

; 使用 wsprintfA() 将一个 ANSI 字符串打印到缓冲中.
DllCall("wsprintfA", "Ptr", bufA, "AStr", "0x%08x", "UInt", 4919, "CDecl")

; 从 bufA 中获取字符串(转换为本地格式), 并将其显示出来.
MsgBox StrGet(bufA, "CP0")
unixetc