BSTR 转换
来源:互联网 发布:淘宝女装长袖短装 编辑:程序博客网 时间:2024/06/07 14:47
BSTR是一种字符串指针,如果你在VC找寻其定义,你会发现它其实是unsigned short*,然而它不能像普通的字符串指针char*一样可以直接赋值,而必须使用SysAllocString来分配,用SysFreeString来释放。
另外,又有两个BSTR的包容类_bstr_t和CComBSTR,它们是为了编程者使用BSTR更加方便,因为在他们的构造函数中都调用了SysAllocString,析构函数调用了SysFreeString,然而使用这两个类时仍然需要特别注意,否则也会导致不可预知的错误。
举例如下:
1.标准用法:
BSTR str = SysAllocString(L”aaa”);
…(可以使用此BSTR变量的范围)
SysFreeString(str);
str = NULL;
需要注意的是当SysFreeString被调用后,最好将此BSTR变量赋为NULL,以防止多次释放,导致释放非法内存空间。
2._bstr_t类型有一个函数叫copy,使用时需要当心,因为它其实调用了SysAllocStringByteLen,所以需要调用者去释放返回的BSTR字符串。
用法如下:
_bstr_t m_state = L"cc";
BSTR str = m_state.copy();
…(可以使用此BSTR变量的范围)
SysFreeString(str);
str = NULL;
3._bstr_t类型有一个特殊构造函数,其第二个参数是一个bool值,表示是否进行SysAllocString,如果是false,表示直接将此字符指针赋给_bstr_t内部所包容的BSTR,这虽然给使用者带来了更大的灵活性,但却需要使用时更加注意,用法如下:
BSTR str1 = SysAllocString(L”aaa”);
_bstr_t str2(str1, false);
注意,此时不需要调用SysFreeString,因为_bstr_t的构造函数虽然没有调用SysAllocString,但其析构函数仍然会调用SysFreeString。所以不需要使用者自己去释放了。
4.函数接口传递BSTR或BSTR*的基本规则
· 如果调用一个使用BSTR参数的函数,调用者负责在调用前分配BSTR,在调用后释放。
连接:http://blog.csdn.net/wangqiulin123456/article/details/8114638
- BSTR 转换
- 关于BSTR转换
- char * bstr CComBSTR 转换
- BSTR转换成char*
- BSTR转换成char*
- BSTR与char*转换
- BSTR 和 char * 转换
- BSTR、char*和CString转换
- BSTR、char*和CString转换
- CString ,BSTR ,LPCTSTR字符串转换
- char * 和 BSTR的转换
- BSTR、char*和CString转换
- BSTR、char*和CString转换
- BSTR、char*和CString转换
- BSTR、char*和CString转换
- BSTR 转换到 UTF 笔记
- BSTR、char*和CString转换
- BSTR、char*和CString转换
- XTU 1185 Bob's Problem
- nagios 工作原理
- 大话数据结构(三)线性表
- 收藏:yurow birdshover 写得不错的《Lucene.Net 2.3.1开发》系列博客文章目录
- freelist 管理空闲段
- BSTR 转换
- NSUserDefaults数据存储在什么地方?
- u盘安装win7 【选择要安装的驱动程序】 导致安装不能继续
- 【Oracle】基于SCHEDULER的job的详解
- HDU 1002 A + B Problem II 【大数相加】(3.16)
- 时间结构体(二)
- Jetty8不能編譯JSP,報"There is an error in invoking javac. A full JDK (not just JRE) is required"錯誤
- MATLAB小问题集
- The X11 forwarding request was rejected!