level 1
黄金止手
楼主
此参数一般来说用不上。
而且 FP 档案里似乎也没写过这种参数的用法,Delphi 官网上也似乎找不到。这里我试图自己总结一下。
此类型和开放数组一样,只能出现于参数列表中,不是真实的类型。
用法:在参数列表中声明类型为 openstring 。可以带 var/out/const/constref 修饰。不带修饰时为按值传递,带修饰时为按引用传递。
限制:只能给 openstring 参数传入短字符串。
按值传递时,其他类型如 PChar 和 AnsiString 会被转换短字符串,并在长度 255 处截断。按引用传递时,传入参数必须是短字符串,const/constref 允许传入字符串字面常量,此时字面常量会在内存中作为短字符串实例化。
openstring 参数会在栈上传字符串本身的地址(同下标 0 元素的地址)和字符串最大长度,最大长度即声明 string[N] 中的 N (对于 ShortString 和默认的 string 此值为 255),会由编译器记录并传递。
按值传递时,子程序会在栈上把字符串复制一遍,再使用复制后的字符串地址,此行为同开放数组。
2016年09月11日 15点09分
1
而且 FP 档案里似乎也没写过这种参数的用法,Delphi 官网上也似乎找不到。这里我试图自己总结一下。
此类型和开放数组一样,只能出现于参数列表中,不是真实的类型。
用法:在参数列表中声明类型为 openstring 。可以带 var/out/const/constref 修饰。不带修饰时为按值传递,带修饰时为按引用传递。
限制:只能给 openstring 参数传入短字符串。
按值传递时,其他类型如 PChar 和 AnsiString 会被转换短字符串,并在长度 255 处截断。按引用传递时,传入参数必须是短字符串,const/constref 允许传入字符串字面常量,此时字面常量会在内存中作为短字符串实例化。
openstring 参数会在栈上传字符串本身的地址(同下标 0 元素的地址)和字符串最大长度,最大长度即声明 string[N] 中的 N (对于 ShortString 和默认的 string 此值为 255),会由编译器记录并传递。
按值传递时,子程序会在栈上把字符串复制一遍,再使用复制后的字符串地址,此行为同开放数组。