英文的我编不下去了,所以还是先写个中文的吧,
之前遇到了SysStringLen求Bstr长度不正确的问题,试验了几次都不行的情况下我觉得可能是这个方法的bug,所以就没管。
大概的情况是这样:
int n1 = SysStringLen(m_str);//n1的值是10
m_str[] = '\0'; //当时就觉得问题应该出在这里,然而没有仔细去想
int n2 = SysStringLen(m_str);//n2的值仍然是10
看了一下BSTR的宏定义,我以为bstr只是一个WCHAR*,然后就写了这样一段代码:
所以我觉得这个SysStringLen肯定是有问题的,所以就决定不用它了。
周五开会的时候Simon让我弄明白到底怎么回事,所以我就百度了一下,
所以我的代码一开始就写错了?
然后我就改了一下:
果然这次结果就对了~
所以既然这个方法能读到它的长度,如果不是通过查找\0来判断结束,那差不多就是把长度写到了内存里,所以我决定去内存中找找答案
然而并没有卵用,没有找到什么跟6有关的东西。
但巧的是我手滑把鼠标滚轮往上滚了一下,
画框的地方有些让人注意的东西,尤其是那个“0c” 不就是12吗?
所以我又改了一下代码:
这回没跑了 ,这个12(换成10进制就是18)正好就是长度信息。
所以SysStringLen应该就是读的这个内存里的内容没跑了。
为了验证这个问题,我写了几段代码验证了一下:
所以SysStringLen这个方法只是读取了BSTR写在内存中的长度信息,和字符串的结束符在哪没有任何关系