BSTR

✍ dations ◷ 2025-10-15 08:41:14 #数据结构

BSTR(Basic String)是一种Pascal-Style字符串(明确标示字符串长度)和C-Style字符串(以\0结尾)的混合物,一般用于COM中,是Unicode字符串,即标示字符串长度,最后还有一个值为\0字节。

对于BSTR,NULL与""有相同的语义(Visual Basic引入的语义)。BSTR的长度不包含结尾的\0字节。BSTR必须用SysAlloc*操作系统API申请与释放。

C程序语言本身原并不支持字符串数据结构。字符串通常以一个字符数组(或称数组)或一个指向字符数据的指针来表达。由于C语言的数组不包含其长度的信息,故亦无法表示所载之字符串之长度。C语言社群对此通用之解决方案为于字符串末端增添一数值0的字符。C语言的标准程序库中的字符串处理功能亦以此为基础。C-Style 字符串特点为不直接包含长度信息。要获取字符串之长度,就必须从头到尾数算字符数目,直到遇到字符0为止。由于不设长度信息,故C-style 字符串的长度理论上可以无上限。

Pascal程序语言采取另一种方向处理字符串。在存储字符串的记忆空间的开首,存储一固定长度整数以表达其长度。如此Pascal-style 字符串不需要在最后增添额外字符以标明其结束。但由于字符串开首存储字符串长度的空间有限,故Pascal-style 的字符串长度有上限。但在获得字符串长度方面有速度优势。

BSTR 字符串结合了C-style 字符串和Pascal-style字符串。它在前4字节存储了字符串长度(字符串的字节数,但不包括Null结束符),在字符串结尾以字符0识别。和pascal-style 字符串不同,指向BSTR字符串的指针指向第一个字符,而非开首的字符串长度。故此适用于读取C-style 字符串的程序库同样适用于BSTR字符串(但写入则另作别论)。 字符是按照Unicode编码保存。允许在BSTR串中间嵌入NULL字符。

Windows提供了BSTR相关函数:

相关

  • 成骨作用成骨作用指硬骨的生成,过程主要是以软骨为主的结缔组织被骨细胞取代,并引起血管新生,带来钙离子以利硬骨细胞合成骨质。成骨的过程又基于生长的模式分为:软骨内骨化、膜内骨化。
  • 库贾氏症克罗伊茨费尔特-雅各布病(英语:Creutzfeldt-Jakob disease,简称CJD),或称克-雅氏症、克-雅氏病、克雅二氏症、克雅二氏病、库雅氏症、库贾氏症、克雅氏症、克雅氏病,是一种发生在
  • 绝对温标热力学温标,又称开尔文温标、绝对温标,简称开氏温标,凯氏温标,是一种标定、量化温度的方法。它对应的物理量是热力学温度,或称开氏度,符号为K,为国际单位制中的基本物理量之一;对应
  • 阿非利加省阿非利加行省(拉丁语:Africa)是罗马共和国及其继承者罗马帝国在今北非的一个行省,范围约在今日的突尼斯北部及利比亚西部靠地中海沿岸的地区。阿非利加行省是好几个罗马帝国时代
  • 南昌绕城高速南昌绕城高速公路(中国国家高速公路网编号:G6001),是环绕南昌市的一条高速公路,由南昌东外环、南昌西外环和待建的南昌南外环组成环线,另外昌樟高速公路的厚田到生米段纳也纳入本
  • 叙利亚语叙利亚语是中古阿拉姆语(属闪米特语族)的一种方言,在新月沃土的大部分地方都有分布。经典叙利亚语成为4-8世纪中东地区的书面语言,古典叙利亚语文学的作品就是以它为载体。现在
  • 2011年热带风暴李热带风暴李(英语:Tropical Storm Lee)是2011年大西洋飓风季形成的第十五个热带气旋,也是第十二场获命名的风暴。
  • 嫁妆死亡嫁妆死亡,是因夫家认为嫁妆不足,直接或间接造成妻子死亡的事件。嫁妆死亡常见于印度、巴基斯坦及孟加拉;在当地,许多妻子因此遭烧死、毒死、泼酸,或死于手术等,但被掩饰为意外事件
  • 郑儋郑儋(8世纪-801年),荥阳人,唐朝官员,出自荥阳郑氏南祖。郑儋早年住母家陇西李氏,舅舅吏部侍郎李季卿称郑儋必定能再兴郑氏,初娶范阳卢氏女,历官河东行军司马。贞元十六年(800年),授官检
  • 螺旋狸藻属螺旋狸藻 (学名:)是食虫植物的一个属,英语中也被称为开瓶器植物(corkscrew plants)。 约30种螺旋狸藻生长在横跨非洲、中美和南美的潮湿陆生与半水生环境中。 本属植物使用高度特