zoukankan      html  css  js  c++  java
  • 关于BSTR和SysStringLen方法的简单研究

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

    之前遇到了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让我弄明白到底怎么回事,所以我就百度了一下,

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

    然后我就改了一下:

    果然这次结果就对了~

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

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

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

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

    所以我又改了一下代码:

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

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

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

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

  • 相关阅读:
    输入分隔符
    GO
    match|align|identify|cover_rate
    KEGG
    InterProScan
    Functional annotation
    GeneWise
    get middle lines
    goland debug web app with urfave cli
    go mod proxy
  • 原文地址:https://www.cnblogs.com/gin304994/p/6823774.html
Copyright © 2011-2022 走看看