1. OLECHAR
一般COM中用OLECHAR来表示字符,如果在win32系统中,OLECHAR就是 wcahr_t
如果是在win16系统中,那么OLECHAR就是 char
2. BSTR
BSTR是带有字符串长度信息的以NULL结尾的一个OLECHAR数组。
(1)BSTR的创建: SysAllocString,也就是说,BSTR的创建只能通过SysAllocString的返回值来得到。不要通过其他的方法来对BSTR进行赋值。
BSTR SysAllocString( const OLECHAR * sz );
(2)BSTR的销毁:SysFreeString
VOID SysFreeString( BSTR bstr );
调用了SysAllocString后,一定要调用SysFreeString进行释放,否则会导致内存泄露。
3. CComBSTR
CComBSTR是COM对BSTR的封装。
它不需要手动去管理BSTR字符串的申请和释放。
(1) 构造函数
可以接受一个LPCOLESTR的指针
可以接受一个LPCSTR的指针
也可以接受一个 CComBSTR
(2) 赋值函数
可以接受一个LPCOLESTR的指针
可以接受一个LPCSTR的指针
也可以接受一个 CComBSTR
(3) Copy函数
返回一个 BSTR
CopyTo函数
将内部的BSTR拷贝到指定的BSTR,同时内部的BSTR继续保留,不会被销毁。
(4) Attach 函数
将一个BSTR赋值给CComBSTR,但是如果CComBSTR的m_str成员不为NULL,那么先释放老的BSTR,在创建新的BSTR
(5) Detach函数
返回CComBSTR内部的BSTR m_str成员,将这个内部的BSTR跟CComBSTR分离。
分离后,这个BSTR就不再会被CComBSTR所自动释放空间,必须用SysFreeString手动释放,否则会内存泄露。
(6) AppendBSTR函数
将一个BSTR赋值给CComBSTR,其中其中可以包含NULL,而其他的赋值操作比如:Append则会被中间包含的NULL截断。所以一般将BSTR赋值给CComBSTR都用AppendBSTR函数。
(7)特别注意:编译器不能分辨LPCOLESTR(即 OLECHAR*)和 BSTR,但是一般BSTR包含有长度信息,而且不是用NULL来表示
结尾的,所以这两种类型最好不要互相传递,否则很容易导致麻烦。