当您创建 BSTR的并将它们使用以避免内存泄漏的它们在COM对象之间时,必须注意在将内存的。       当 BSTR 在接口中保持,必须释放其内存,当处理它。       但是,那么,当 BSTR 通过在接口外时,接收的对象对其内存管理的责任。

通常,分配和释放为 BSTR分配的内存的规则如下:

  • 在您调用需要 BSTR 参数的函数时,必须在调用之前分配 BSTR 的内存和之后释放。       例如:


    HRESULT CMyWebBrowser::put_StatusText(BSTR bstr)

    // shows using the Win32 function
    // to allocate memory for the string:
    BSTR bstrStatus = ::SysAllocString(L"Some text");
    if (bstrStatus != NULL)
    {
    pBrowser->put_StatusText(bstrStatus);
    // Free the string:
    ::SysFreeString(bstrStatus);
    }
  • 在您调用返回 BSTR的函数时,必须释放字符串。       例如:


    HRESULT CMyWebBrowser::get_StatusText(BSTR* pbstr)

    BSTR bstrStatus;
    pBrowser->get_StatusText(&bstrStatus); // shows using the Win32 function
    // to free the memory for the string:
    ::SysFreeString(bstrStatus);
  • 在实现返回 BSTR的函数时,将字符串,但不要释放它。       接收函数释放内存。       例如:


    HRESULT CMyClass::get_StatusText(BSTR* pbstr)
    {
    try
    {
    //m_str is a CString in your class
    *pbstr = m_str.AllocSysString();
    }
    catch (...)
    {
    return E_OUTOFMEMORY;
    } // The client is now responsible for freeing pbstr.
    return(S_OK);
    }

摘:分配和释放BSTR的内存的更多相关文章

  1. 分配和释放 BSTR 的内存

    本文档已存档,并且将不进行维护. 分配和释放 BSTR 的内存 Visual Studio .NET 2003                  转自: https://msdn.microsoft. ...

  2. C语言中的内存分配与释放

    C语言中的内存分配与释放 对C语言一直都是抱着学习的态度,很多都不懂,今天突然被问道C语言的内存分配问题,说了一些自己知道的,但感觉回答的并不完善,所以才有这篇笔记,总结一下C语言中内存分配的主要内容 ...

  3. DLL函数中内存分配及释放的问题

    DLL函数中内存分配及释放的问题 最近一直在写DLL,遇到了一些比较难缠的问题,不过目前基本都解决了.主要是一些内存分配引起问题,既有大家经常遇到的现象也有特殊的 情况,这里总结一下,做为资料. 错误 ...

  4. 内存管理概述、内存分配与释放、地址映射机制(mm_struct, vm_area_struct)、malloc/free 的实现

    http://blog.csdn.net/pi9nc/article/details/23334659 注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料 ...

  5. 浅析C++内存分配与释放操作过程——三种方式可以分配内存new operator, operator new,placement new

    引言:C++中总共有三种方式可以分配内存,new operator, operator new,placement new. 一,new operator 这就是我们最常使用的 new 操作符.查看汇 ...

  6. Com组件的内存分配和释放,CredentialProvider SHStrDup 字符串拷贝问题

    一.简单介绍 熟悉CredentialProvider的同学应该知道,他为一个Com组件,于是,在这里的内存分配(字符串拷贝)的一系列操作就要依照con的标准来. 二.Com组件的内存分配和释放 CO ...

  7. 如何在MD(d)和MT(d)工程间正确分配和释放动态内存

    MD(d)和MT(d) MD(d)和MT(d)是windows下VC开发的两个编译选项,表示程序的运行时库编译选项. /MT是"multithread, static version&quo ...

  8. FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  9. Linux的虚拟内存管理-如何分配和释放内存,以提高服务器在高并发情况下的性能,从而降低了系统的负载

    Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...

随机推荐

  1. Win Socket编程原理及简单实例

    [转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html 使用Linux Socket做了小型的分布式,如Linux ...

  2. 支持5G-WiFi的安卓设备搜索不到5G信号解决方法

    安卓设备必须获得root权限,然后修改 /system/etc/wifi/nvram_net.txt 文件, 将ccode = CN 改为 ccode = ALL.保存并重启即可. 三星EK-GC11 ...

  3. C#的几种写文件方法

    C#写文件处理操作在很多的开发项目中都会涉及,那么具体的实现方法是什么呢?这里向大家介绍三大方法,希望对你在开发应用中有所启发. 首先C#写文件处理操作必须先导入命名空间:using System.I ...

  4. C#.NET常见问题(FAQ)-如何生成release版本的程序,生成debug版本的程序

    除了右击项目在生成中配置改成Release还要在顶部切换成Release     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai1 ...

  5. STL - 容器 - Map(一)

    MapTest.cpp #include <map> #include <string> #include <iostream> #include <algo ...

  6. ZH奶酪:Linux/Ubuntu 安装/卸载 软件

    1.安装.deb文件 以安装Chrome为例: (1)到官方网站下载Chrome浏览器相应版本,比如google-chrome-stable_current_i386.deb: (2)Ctrl+Alt ...

  7. (C++)UrlEncode的标准实现

    http://blog.163.com/xiaopengyan_109/blog/static/149832173201072685539394/ 地址栏传中文参数后是什么编码格式 网页中的表单使用P ...

  8. iOS判断日期A是否在日期B到日期C之间

    方法一: 可以用nsdate 的 timeIntervalSince1970 方法把时间转换成时间戳进行比较,这里timeIntervalSince1970返回的是NSTimeInterval(dou ...

  9. Mysql(一)安装

    一.下载 下载地址:http://www.mysql.com/downloads/ 二.安装 解压 双击安装 下一步,选择NO, 下一步,选择, 按需求选择,这时选择developer default ...

  10. POJ 1436 Horizontally Visible Segments (线段树&#183;区间染色)

    题意   在坐标系中有n条平行于y轴的线段  当一条线段与还有一条线段之间能够连一条平行与x轴的线不与其他线段相交  就视为它们是可见的  问有多少组三条线段两两相互可见 先把全部线段存下来  并按x ...