请教:BSTR如何正确使用

daveice 2003-09-12 08:49:34
MSDN中说,BSTR前面有四个字节,用来存放字符串的长度,是一个long型的整数。我在控件中定义了一个BSTR字符串,初始化如下:

BSTR path = CComBSTR("");    //这是控件的一个属性

可以看到它的长度为0,内容为空;控件创建后,发现它的长度变为了73,内容为Font(每次都是这样)。我跟踪过,在一段汇编代码中改变了path所指向的内存,为什么这段内存会被修改?BSTR的长度存在哪里,怎么长度也会变呢?

每次打开属性页显示这个属性时,path所指向的内存都会被修改,长度也会被修改。这是什么原因?怎么改正啊?

...全文
52 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
daveice 2003-09-16
  • 打赏
  • 举报
回复
每次都要去分配空间是不是会增加额外的开销?我现在就是这样做的,工作良好。

我的问题是为什么我在控件构造时就给申请260个单位的空间会出错呢?
masterz 2003-09-13
  • 打赏
  • 举报
回复
you should allocate BSTR with
BSTR SysAllocString(
const OLECHAR * sz
);
peterleex 2003-09-12
  • 打赏
  • 举报
回复
这样试试:
OLECHAR* str = OLESTR("");
CComBSTR path(wcslen(str));
wcscpy(path.m_str,str);
triout 2003-09-12
  • 打赏
  • 举报
回复
是否BSTR是动态分配的?
daveice 2003-09-12
  • 打赏
  • 举报
回复
peter的方法还是不行的,用copy还是会出错;
我还得每次用都去申请一块新鲜的内存,这样不会出错。
daveice 2003-09-12
  • 打赏
  • 举报
回复
我是动态分配的,如果我分配得恰好够,就会出错。
我今天把大小固定为260(路径的最大长度),就没出过错了。不过我还是没搞懂是怎么回来。
我呆会去试试peter的方法

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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