从内存地址复制字符串, 可选地将其从给定的代码页转换为可识别的字符串.
String := StrGet(Source , Length , Encoding := None)
字符串的内存地址.
如果指定了 Length 参数, 则字符串不需要以空终止符结尾.
需读取的长度, 以字符为单位. 如果字符串以空终止符结尾, 则可以省略.
注意: 如果字符串不是以空终止符结尾的, 则省略 Length 可能会造成访问冲突, 从而导致程序终止或其他一些不希望的结果. 指定不正确的长度可能会产生意外的行为.
注意: 不支持嵌入的空终止符, 这通常会导致字符串的截断.
源编码; 例如, "UTF-8"
, "UTF-16"
或 "CP936"
. 对于数字标识符, 只有在指定 Length 时, 才可以省略前缀 "CP". 指定空字符串或 "CP0"
则使用系统默认 ANSI 代码页.
函数返回复制或转换后的字符串. 如果正确地指定了源编码, 则返回值总是使用原生编码. 它总是以空终止符终止, 但是空终止符不包括在返回值的 length 中.
如果检测到无效参数或转换无法执行, 则返回空字符串.
注意, 返回值总是使用当前可执行文件的原生编码, 而 Encoding 指定了如何解释从给定 Source 读取到的字符串. 如果没有指定 Encoding, 则只复制字符串而不进行任何转换.
换句话说, StrGet 用于从内存地址检索文本, 或者将其转换为脚本可以接受的格式.
如果需要在代码页之间进行转换, 返回值的长度可能与源字符串的长度不同.
字符编码, StrPut(), 脚本兼容性, FileEncoding, DllCall(), VarSetCapacity()
#1: Length 或 Encoding 都可以直接在 Source 后面指定, 但在这种情况下 Encoding 必须是非数字的:
str := StrGet(address, "cp0") ; 代码页 0, 未指定长度 str := StrGet(address, n, 0) ; 最大 n 字符, 代码页 0 str := StrGet(address, 0) ; 最大 0 字符(始终为空)