vckbase网站上面的<<COM组建设计与应用>>系列教程里面说道:由于BSTR的指针就是指向 UNICODE 串,因此 BSTR 和 LPOLESTR 可以在一定程度上混用,但一定要注意:
有函数 fun(LPCOLESTR lp),则你调用 BSTR p=...; fun(p); 正确
有函数 fun(const BSTR bstr),则你调用 LPCOLESTR p=...; fun(p); 错误!!!为什么第二种类型转换就是错误的呢? 我百思不得其解啊
有函数 fun(LPCOLESTR lp),则你调用 BSTR p=...; fun(p); 正确
有函数 fun(const BSTR bstr),则你调用 LPCOLESTR p=...; fun(p); 错误!!!为什么第二种类型转换就是错误的呢? 我百思不得其解啊
解决方案 »
- 关于Image::FromStream的问题
- 如何让程序在CPU空闲时运行
- 急等:怎么我的BeginWaitCursor和EndWaitCursor不起作用了?
- OCX控件IE上自动下载 ------ 该怎么做????
- 关于类的调用
- 高分提问,值得关注哦,先送上100 分,解决了再另加,题目是关于画出淅开线的算法,至于淅开线的其体形成我也不是很清楚,有说明这个得也
- 加了滚动条,怎么里面的图像不跟着滚动
- 求一个由VC++的MFC编写的表格程序源代码示例
- 修复工具的实现?
- 关于32位应用程序在64位系统下的可用内存空间问题?
- 关于MFC按钮弹出Opengl画面的问题
- 请问这样的透明笔刷该怎么设计? 思路就行,本以为很简单,可是真做起来就卡了- -
2、LPCOLESTR是指针常量,指向的OLECHAR字符数组。简单的说差别是 BSTR比LPCOLESTR多了长度前缀。
fun(const BSTR bstr),则你调用 LPCOLESTR p=...; fun(p); 这里的fun希冀的是得到一个BSTR,函数内部可能要用到BSTR的长度前缀这个字段属性,此时如果你传的是一个无长度前缀的LPCOLESTR,函数内就可能会发生不可估计的逻辑错误。反过来却不会发生错误(多出来属性我可以不用)。所以语法上做了这个限制。关于各平台上的字符串的转换都会用到特定的宏,LPCOLESTR与BSTR肯定是有ATL字符串转换宏的吧。为了操作的安全,建议不直接混用。当然这都是我的猜测,我没用过COM,我刚才研究了一下。