关于BSTR和SysStringLen方法的简单研究

英文的我编不下去了,所以还是先写个中文的吧,

 

之前遇到了SysStringLen求Bstr长度不正确的问题,试验了几次都不行的情况下我觉得可能是这个方法的bug,所以就没管。

大概的情况是这样:

int n1 = SysStringLen(m_str);//n1的值是10
m_str[0] = '\0';         //当时就觉得问题应该出在这里,然而没有仔细去想
int n2 = SysStringLen(m_str);//n2的值仍然是10

看了一下BSTR的宏定义,我以为bstr只是一个WCHAR*,然后就写了这样一段代码:

 

所以我觉得这个SysStringLen肯定是有问题的,所以就决定不用它了。

 

周五开会的时候Simon让我弄明白到底怎么回事,所以我就百度了一下,

所以我的代码一开始就写错了? 

然后我就改了一下:

果然这次结果就对了~

所以既然这个方法能读到它的长度,如果不是通过查找\0来判断结束,那差不多就是把长度写到了内存里,所以我决定去内存中找找答案

然而并没有卵用,没有找到什么跟6有关的东西。

但巧的是我手滑把鼠标滚轮往上滚了一下,

画框的地方有些让人注意的东西,尤其是那个“0c” 不就是12吗?

所以我又改了一下代码:

这回没跑了 ,这个12(换成10进制就是18)正好就是长度信息。

所以SysStringLen应该就是读的这个内存里的内容没跑了。

为了验证这个问题,我写了几段代码验证了一下:

 

所以SysStringLen这个方法只是读取了BSTR写在内存中的长度信息,和字符串的结束符在哪没有任何关系 

 

转载于:https://www.cnblogs.com/gin304994/p/6823774.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值