ThinkX(思考中) 请进。(200%的抱歉)

yeahchang 2003-03-02 05:34:14
感谢你在http://expert.csdn.net/Expert/topic/1480/1480685.xml?temp=.3319818上的解答。

现给你补分(40*200%)
...全文
45 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeahchang 2003-03-02
  • 打赏
  • 举报
回复
佩服佩服,这些资料您们是怎么知道的?
ThinkX 2003-03-02
  • 打赏
  • 举报
回复
To rh:
BSTR和OLECHAR* 在C++的类型中是兼容的,但不同的是BSTR在第一个字符以前有4个字节用于表示字符串的长度。
int StringFromGUID2(REFGUID rguid, LPOLESTR lpsz, int cchMax);
如果cchMax的参数不是39而是50(足够大就可),那么如果这个函数中使用wcscpy实现的(不会修改头部长度),那么这个BSTR的头部的字符串长度和其实际长度(0x00结尾的串)有可能不符合,我不知道会有什么后果(如内存泄漏),当然用39做参数也许可行。
所以我认为BSTR和LPOLECHAR不一定兼容很好,如果参数要求用LPOLECHAR那么我是不会传BSTR的。


rh 2003-03-02
  • 打赏
  • 举报
回复
对哦,思考中的牛人,我发现你的回复有点错误,那函数的原型是:
BSTR SysAllocString(
const OLECHAR * sz
);
看看:
typedef WCHAR OLECHAR;
typedef OLECHAR *BSTR;
所以BSTR是没有问题的。
我觉得他的代码的错误原因在于内存分配不足。
ThinkX 2003-03-02
  • 打赏
  • 举报
回复
谢谢,接分
rh 2003-03-02
  • 打赏
  • 举报
回复
haha,不错,还真的开帖给了呢

帖主好样的!

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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