COM中的OLECHAR ,BSTR和CComBSTR的理解和应用

    技术2025-05-02  13

     

                       COM中的OLECHAR ,BSTR和CComBSTR  的理解和应用

     

    1.         OLECHAR  

      一般COM中用OLECHAR来表示字符,如果在win32系统中,OLECHAR就是 wcahr_t

      如果是在win16系统中,那么OLECHAR就是 char

     

      

    2.        BSTR

    BSTR是带有字符串长度信息的以NULL结尾的一个OLECHAR数组。

     

    1BSTR的创建:  SysAllocString,也就是说,BSTR的创建只能通过SysAllocString的返回值来得到。不要通过其他的方法来对BSTR进行赋值。

     

    BSTR SysAllocString(   const OLECHAR *  sz  );

     

    2BSTR的销毁:SysFreeString

    VOID SysFreeString( BSTR  bstr  );

     

    调用了SysAllocString后,一定要调用SysFreeString进行释放,否则会导致内存泄露。

     

    3.        CComBSTR

    CComBSTRCOMBSTR的封装。

    它不需要手动去管理BSTR字符串的申请和释放。

     

    (1)       构造函数

    可以接受一个LPCOLESTR的指针

    可以接受一个LPCSTR的指针

    也可以接受一个 CComBSTR

     

     

    (2)       赋值函数

    可以接受一个LPCOLESTR的指针

    可以接受一个LPCSTR的指针

    也可以接受一个 CComBSTR

     

    (3)    Copy函数

          返回一个 BSTR

     

          CopyTo函数

          将内部的BSTR拷贝到指定的BSTR,同时内部的BSTR继续保留,不会被销毁。

     

    (4)    Attach 函数

          将一个BSTR赋值给CComBSTR,但是如果CComBSTRm_str成员不为NULL,那么先释放老的BSTR,在创建新的BSTR

     

     

    5  Detach函数

         返回CComBSTR内部的BSTR  m_str成员,将这个内部的BSTRCComBSTR分离。

         分离后,这个BSTR就不再会被CComBSTR所自动释放空间,必须用SysFreeString手动释放,否则会内存泄露。

     

    (6)   AppendBSTR函数

         将一个BSTR赋值给CComBSTR,其中其中可以包含NULL,而其他的赋值操作比如:Append则会被中间包含的NULL截断。所以一般将BSTR赋值给CComBSTR都用AppendBSTR函数。

     

    (7)特别注意:编译器不能分辨LPCOLESTR(即 OLECHAR*)和 BSTR,但是一般BSTR包含有长度信息,而且不是用NULL来表示

       结尾的,所以这两种类型最好不要互相传递,否则很容易导致麻烦。

     

     

     

     

     

                          

     

    最新回复(0)