关于 CComBSTR BSTR char* 之间的转换

jacky_qiu 2011-10-17 02:23:04
请问以下几种情况正确吗:

1.
CComBSTR cbstr(L"jacky ff");
TCHAR * p=cbstr;
trace(p);

//编译和运行通过

2.
BSTR bstrText = ::SysAllocString(L"Tesvvvvt");
p=bstrText;
trace(p);
SysFreeString(bstrText); // 用完释放

BSTR可以直接赋值给char*吗?

//编译和运行通过


3.
BSTR bstrText = _bstr_t("This is a test");
//编译和运行通过
//但问题是_bstr_t调用了析构函数了。

4.
BSTR bstrText = CComBSTR("This is a test");
//编译和运行通过
//但问题是CComBSTR调用了析构函数了。
...全文
201 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishion 2011-10-17
  • 打赏
  • 举报
回复
BSTR可以直接赋值给char*吗?
不可以,BSTR是所指示的字符串是宽字节的,要用WCHAR,当然你强制转换另算


析构函数只要是在大括号内不调用就没事的
lgstudyvc 2011-10-17
  • 打赏
  • 举报
回复
xue xie
WaistCoat07 2011-10-17
  • 打赏
  • 举报
回复
首先BSTR是带字符长度前缀的WCHAR*(宽字符);
CComBSTR/_bstr_t 是对BSTR的封装;
char* ansi字符串指针

1)不正确,如果你的程序是UNICODE版不会有问题,否则不能直接等;
2)BSTR不可以直接赋值给char*,因为两个类型明显不一致;
3)这是C++类作用域的范畴,跟BSTR没关系;
4)同3
ysjyniiq 2011-10-17
  • 打赏
  • 举报
回复
3跟4,仅仅创建临时对象,并调用强制类型转换操作符,返回一个指针,接着_bstr_t或CComBSTR就析构了。bstrText的有效期是极短的,它的有效性随着这行代码执行完而结束。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧