Delphi XE4中Variant类型值疑问:VarString为何返回258?
问题解析:VarType返回258而非预期的19/256的原因
首先明确:VarType返回的整数值是基础类型码与类型标志位的组合,你看到的258对应varOleStr类型,而非单纯的varString。
关键类型定义说明
- 在Delphi的传统定义中,
varString(对应ShortString类型)的值是19。 - 在COM/OLE的Variant规范里,字符串类型
VT_BSTR的值是256,Delphi将其映射为varOleStr,而varOleStr的实际定义是258(即$0102)——这是因为它在基础字符串类型的基础上,附加了OLE兼容的标志位。
你得到258的原因
你的变量bob实际存储的是OLE宽字符串(OleStr),而非Delphi原生的ShortString。当你调用VarType(bob)时,自然会返回varOleStr对应的258,而非varString的19或VT_BSTR的256。
验证与处理建议
如果需要判断字符串类型,不要直接对比数值,而是用Delphi提供的类型常量或VarIsStr函数:
if VarType(bob) = varOleStr then // 处理OLE宽字符串 else if VarType(bob) = varString then // 处理传统ShortString // 或者更通用的判断: if VarIsStr(bob) then // 所有字符串类型统一处理
内容的提问来源于stack exchange,提问作者thrutch
相关产品推荐
相关产品推荐

