BSTR结构

CorelDraw插件开发-_bstr_t-字符串对象-内存结构分析-CDR插件开发 通过范例的形式,分析_bstr_t对象的内存模型,方便在逆向分析时遇到此对象时,更好的理解,同时熟练使用X64dbg查看内存数据。 阅读详情

 

在头文件WTypes.h中查到的定义

 

typedef /* [wire_marshal] */ OLECHAR *BSTR;

 

typedef WCHAR OLECHAR;

 

typedef wchar_t WCHAR;    // wc,   16-bit UNICODE character    //WinNT.h

 

结论是BSTR就是一个数组指针。每个数组的元素双字节存储而已。这是仅仅从以上定义中得到的。

 

但是不仅仅是这点

 

1. BSTR的前四个字节存储的是一个int型的整数,意义在于整个字符串数组的字节长度。

2. BSTR的最后两个字节存储的是一个空字符'/0';

 

这里的长度有两点要注意,1,长度不是字符的个数,是字符串数组的存储空间字节长度;2,这个长度不包括最后一个空字符'/0';

 


结构举例:BSTR bstr存储字符串ABCDEF

 

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

0c0000004100420043004400450046000000

12

A

B

C

D

E

F

‘/0’

 

bstr的存储空间如图;总共18个字节;假设第4个字节的地址为0x001556D4

 则

 (int)bstr == 0x001556D4;即bstr指向第4个字节,第一个字符。

cout << bstr << endl;

cout << *bstr << endl;

 

0x001556D4

A

 


 

bstr的API处理函数

SysAllocString

SysFreeString

ConvertStringToBSTR

ConvertBSTRToString

SysStringByteLen

SysStringLen

 

BSTR  bstr = SysAllocString(const OLECHAR   *sz);

若sz = L("AB/0CD");则bstr的内存结构为(每两个字节内容)   4 0  A  B  '/0';

 

SysStringByteLen(BSTR  bstr);返回BSTR的长度域的值;这里为4

SysStringLen(BSTR  bstr);返回BSTR的长度域的值的一半;这里为2。若长度域为3则3/2 = 1,就返回1;

CANopen PDO 配置實戰:3步完成0x1800-0x1A00物件字典映射與事件觸發 本文详细解析CANopen PDO配置实战,通过3个关键步骤完成0x1800-0x1A00对象字典映射与事件触发设置。重点介绍COB-ID位域解析、映射参数配置及事件触发优化,帮助工程师实现工业自动化设备间毫秒级实时数据交换,提升系统通信效率。 阅读详情

相关推荐

告别手动操作!用Python脚本批量处理Siemens NX零件文件(导入/导出/移除参数)

本文详细介绍了如何利用Python脚本实现Siemens NX零件文件的批量处理,包括导入、导出和移除参数等操作。通过NX Open API和Python UF接口,工业设计师可以大幅提升工作效率,告别繁琐的手动操作。文章提供了完整的实战指南,涵盖环境配置、核心功能实现以及性能优化技巧,特别适合需要进行Siemens-NXUG二次开发的工程师参考。

weixin_28222493的博客 259

BSTR详解

 BSTR详解一 - BSTR简介和内部结构 1         Why need BSTRCOM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。·                     C++ 字符串是以0结束的ASCII或Unicode字符数组 ·                     Visual Basic字符串是一个ASCII字符数

FUJIANJUN的专栏 5020

等时替代模型( Isotemporal Substitution Model)

文献阅读:Associations of sedentary time and physical activity with adverse health conditions: Outcome-wide analyses using isotemporal substitution model(该论文于2022年4月28日发表在柳叶刀子刊 EClinicalMedicine 上)

姚巨龙的博客 1万+

BSTR用法详解

BSTR详解  BSTR 详解一 - BSTR 简介和内部结构 1          Why need BSTR COM 是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。 ·                     C++ 字符串是以 0 结束的 ASCII 或 Unicode 字符数组 ·                     Vi

如果爱下去的专栏 8632

AB脉冲详解(编码器,PLC,上位机)

编码器线有些是用不到的。Z脉冲:360度中,只有1度是输出,输出能力是。编码器实际就是发光二极管,所以电流超过20ma会缩短寿命或损坏。

cfqq1989的博客 1万+

MaxKey+JeecgBoot单点登录实战:手把手教你从零配置到账户同步

本文提供MaxKey与JeecgBoot单点登录(SSO)的实战整合指南。详细讲解从MaxKey应用注册、JeecgBoot前后端改造,到最终实现账户同步的完整步骤,重点解决Shiro配置、令牌交换等关键问题,帮助企业构建统一、可扩展的身份管理体系。

weixin_29258297的博客 540

BSTR详解一 -BSTR简介和内部结构

http://blog.youkuaiyun.com/pkrobbie/archive/2007/01/18/1486331.aspx 1 Why need BSTR COM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。 C++ 字符串是以0结束的ASCII或Unicode字符数组Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。Java字符...

weixin_30914981的博客 141

STM32F103C8T6 + GY-906红外测温:手把手教你用CubeMX和HAL库搞定IIC驱动(附完整工程)

本文详细介绍了如何使用STM32F103C8T6和GY-906红外测温传感器(基于MLX90614芯片)实现非接触式温度测量。从STM32CubeMX工程创建、HAL库驱动适配到温度数据采集与处理,提供完整的开发流程和常见问题解决方案,帮助开发者快速掌握红外测温技术。

weixin_29188043的博客 253

BSTR详解一 -BSTR简介和内部结构 (1)

 http://blog.youkuaiyun.com/pkrobbie/archive/2007/01/18/1486331.aspxCOM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。C++ 字符串是以0结束的ASCII或Unicode字符数组Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。Java字符串是以0结束

gooer的专栏 2320

MATLAB基础应用精讲-【强化学习】Actor - Critic 算法(附python代码实现)

这种架构结合了策略梯度方法(Policy - Gradient Methods)和价值函数估计方法(Value Function Estimation Methods)的优点。在强化学习中,智能体(Agent)需要通过与环境(Environment)的交互来学习最优的行为策略,以获得最大的累积奖励(Cumulative Reward)。

qq_36130719的博客 361

华为OD机试真题 新系统 2026-04-22 C++ 实现【小学生班长选举增强版】

9 月份开学第一天,小学某班级进行班长选举活动,班级共有 N 个学生,每个学生最多可投 3 票(对同一个人只能投一票),也可以弃权不投票,大家投票时写上对应学生的名字。 假设学生不存在重名。考虑到部分少数民族名字带分隔,且整体较长,同学在投票时为了方便,允许同学写全称,也可以只写其中的部分连续段。 例如班级里只有 2 个少数民族名称带点的同学:

MISAYAONE的博客 166

BSTR/CComBSTR字符串的结构和用法

参考文档:http://www.vckbase.com/index.php/wv/1604 (注:本文的大部分内容都是从该文章中获取)   BSTR是“Basic String”的简称,微软在COM/OLE中定义的标准字符串数据类型。 BSTR的存储结构为: 1. 字符串头      ---4字节  存储了包好字节(Byte)的个数 2. 字符串内容 ---以unicode方式存储,每

春夜喜雨的专栏 3978

【Davinci开发】:CS接口创建及连接

AUTOSAR SWC之间添加CS-port :详细讲解step

2525

BSTR详解一 - BSTR简介和内部结构

1         Why need BSTRCOM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。 C++ 字符串是以0结束的ASCII或Unicode字符数组 Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。 Java字符串是以0结束的Unicode字符数组。需要定义一种通用的字符串类型

技术随笔 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

BSTR内存结构

COM 中除了使用一些简单标准的数据类型外,字符串类型需要特别重点地说明一下。还记得原则吗?COM组件是运行在分布式环境中的。通俗地说,你不能直接把一个内存指针直接作为参数传递给COM函数。你想想,系统需要把这块内存的内容传递到“地球另一边”的计算机上,因此,我至少需要知道你这块内存的尺寸吧?不然让我如何传递呀?传递多少字节呀?!而字符串又是非常常用的一种类型,因此 COM设计者引入了BASIC中

ugg的专栏 3334

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

BSTR简介和内部结构

 1         Why need BSTRCOM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。C++ 字符串是以0结束的ASCII或Unicode字符数组 Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。 Java字符串是以0结束的Unicode字符数组。需要定义一种通用的字符串类型,可以很容易的匹配到不同编

taixi1268的专栏 688

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

bstr java_BSTR详解一 -BSTR简介和内部结构

http://blog.youkuaiyun.com/pkrobbie/archive/2007/01/18/1486331.aspxCOM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。C++ 字符串是以0结束的ASCII或Unicode字符数组Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。Java字符串是以0结束的Unicode字符数组。需要...

weixin_39636079的博客 356

BSTR详解一 -BSTR简介和内部结构 (1) (转)

2007-11-21 | BSTR详解一 -BSTR简介和内部结构 (1) 1         Why need BSTRCOM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。C++ 字符串是以0结束的ASCII或Unicode字符数组 Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。 Java字

孟游的专栏 1064

BSTR简介和内部结构[ZT]

1.Why need BSTRCOM是一种跨编程语言的平台,需要提供语言无关的数据类型。多数编程语言有自己的字符串表示。 * C++ 字符串是以0结束的ASCII或Unicode字符数组 * Visual Basic字符串是一个ASCII字符数组加上表示长度的前缀。 * Java字符串是以0结束的Unicode字符数组。需要定义一种通用的字符串类型,可以很容易的匹配到不同编程语言...

weixin_30773135的博客 80

我要从com向应用程序返回一个结构,结构中包括二进制数据,请问用什么方式传替比较好呢?BSTR,VARIANT还是其他什么类型比较好呢

楼主sunqi[]我要从com向应用程序返回一个结构,结构中包括二进制数据,请问用什么方式传替比较好呢?BSTR,VARIANT还是其他什么类型比较好呢?问题点数:20、回复次数:6cococut[小鱼的天空]to XT2(): can you tell me where you read these?thank you in advance!XT2[]MSDN Libra

hiyoyo的专栏 375

一个退役中校教你如何用go语言写一个基于B+树的json数据库(进阶篇)之json字符串解析为BsTr结构(二)

json字符串反序列为BsTr中间结构,以及BsTr中间结构序列化为json字符串。

775

BSTR基本用法与类型转换

用到BSTR的时候不太熟悉,经常需要查询,整理了一下以免忘记。 BSTR 是一个指向 UNICODE 字符串的指针,且 BSTR 向前的4个字节中,使用DWORD保存着这个字符串的字节长度( 没有含字符串的结束符)。 头文件:BSTR在atlconv.h中定义,但在使用时包含windows.h或者atlbase.h文件也不会报错。 BSTR的存储结构为: 1. 字符串头 ---4字节 存储了包好字节(Byte)的个数,长度不包括结束符,使用下面语句可以查询出字符串头,从而获取BSTR存储内容的字

gdizcm的专栏 5557
上一篇: udl文件的制作——用于ADO数据库连接(Oracle举例)
下一篇: vs2008编译Xvid源代码 1.2.2版本
MyEclipseWorkspace
博客等级 码龄17年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值