COM编程时经常用到BSTR, 最近使用BSTR时发现一些有意思的事情:
1,把BSTR当成类使居然编译通过!
虽然BSTR是一个指针,然而,用如下语句申明一个BSTR变量编译器也没有提出抗议:
BSTR mystr(L"Surprise!");
这里把BSTR当作类了,但是编译时似乎也没有什么问题。可能因为BSTR是用typedef出来的,所以,编译器可以缺省地把它当作一个内部数据类型来处理。就像你可以写出
int i = 3; int j(i)
这样的东西一样。当然,这样写很可能运行时会出问题,因为L"Surprise"应该是一个WCHAR*,而BSTR除了宽字符部分,还有两个字节的长度值,C++编译器在拷贝时不会把这两个字节考虑进去。
2,使用CComBSTR漏了内存
很多时候,如果函数的出参数是一个BSTR*的时候,我们会在函数外声明一个CComBSTR,然后把这个变量用“&”操作符传递给函数。这种方式会造成内存泄漏。比如
CComBSTR mystr("Leak");
HRESULT hr = OneFunction(&mystr);
其原因是,当用“&”操作mystr时,取得的是CComBSTR包装的BSTR的地址而非CComBSTR类实例的地址。而当在函数内部作 *mystr = L"New string" 的操作时,原来的内存就漏掉了。这就提示我们,使用这种“智能指针”要份外小心,因为它们为了使用方便,往往都重载了“*”或者“&”操作符。一不小心就泄漏内存。
分享到:
相关推荐
在COM中,有一些特殊的内置数据类型...同时,对可能出现的问题有所警惕,可以有效避免潜在的陷阱,提高软件的稳定性和可靠性。在TestCOMType项目中,你可以找到关于这些知识点的具体示例和实践,以便进一步学习和理解。
本文将详细介绍 `CString` 的类型转换方法以及如何避免常见的编程陷阱。 #### CString 类概述 `CString` 类是一个用于存储和操作文本字符串的强大工具。与标准 C++ 的 `std::string` 类相似,`CString` 也提供了...
`ReadMe.htm`文件可能是关于`variant`使用的一些指南或者示例代码的解释,可能包含了如何在不同的上下文中使用`variant`,以及需要注意的陷阱和最佳实践。 `res`目录通常存放应用程序的资源文件,如图标、对话框...
当从ActiveX控件中读取到的BSTR值`strAxSex`也是"男",但它是按照GB2312编码存储的,这就导致了在JavaScript中进行字符串比较时,`strSex == strAxSex` 返回`false`。这是因为两个字符串虽然看起来一样,但它们的...
嵌入式八股文面试题库资料知识宝典-华为的面试试题.zip
训练导控系统设计.pdf
嵌入式八股文面试题库资料知识宝典-网络编程.zip
人脸转正GAN模型的高效压缩.pdf
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
少儿编程scratch项目源代码文件案例素材-鸡蛋.zip
嵌入式系统_USB设备枚举与HID通信_CH559单片机USB主机键盘鼠标复合设备控制_基于CH559单片机的USB主机模式设备枚举与键盘鼠标数据收发系统支持复合设备识别与HID
嵌入式八股文面试题库资料知识宝典-linux常见面试题.zip
面向智慧工地的压力机在线数据的预警应用开发.pdf
基于Unity3D的鱼类运动行为可视化研究.pdf
少儿编程scratch项目源代码文件案例素材-霍格沃茨魔法学校.zip
少儿编程scratch项目源代码文件案例素材-金币冲刺.zip
内容概要:本文深入探讨了HarmonyOS编译构建子系统的作用及其技术细节。作为鸿蒙操作系统背后的关键技术之一,编译构建子系统通过GN和Ninja工具实现了高效的源代码到机器代码的转换,确保了系统的稳定性和性能优化。该系统不仅支持多系统版本构建、芯片厂商定制,还具备强大的调试与维护能力。其高效编译速度、灵活性和可扩展性使其在华为设备和其他智能终端中发挥了重要作用。文章还比较了HarmonyOS编译构建子系统与安卓和iOS编译系统的异同,并展望了其未来的发展趋势和技术演进方向。; 适合人群:对操作系统底层技术感兴趣的开发者、工程师和技术爱好者。; 使用场景及目标:①了解HarmonyOS编译构建子系统的基本概念和工作原理;②掌握其在不同设备上的应用和优化策略;③对比HarmonyOS与安卓、iOS编译系统的差异;④探索其未来发展方向和技术演进路径。; 其他说明:本文详细介绍了HarmonyOS编译构建子系统的架构设计、核心功能和实际应用案例,强调了其在万物互联时代的重要性和潜力。阅读时建议重点关注编译构建子系统的独特优势及其对鸿蒙生态系统的深远影响。
嵌入式八股文面试题库资料知识宝典-奇虎360 2015校园招聘C++研发工程师笔试题.zip
嵌入式八股文面试题库资料知识宝典-腾讯2014校园招聘C语言笔试题(附答案).zip
双种群变异策略改进RWCE算法优化换热网络.pdf