# 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")

dftg