• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 担心:接口中的bstr类型输出参数会不会导致内存泄漏?

担心:接口中的bstr类型输出参数会不会导致内存泄漏?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了bstr类型,bstr是什么类型,bstr数据类型,bstr,bstr t等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 担心:接口中的bstr类型输出参数会不会导致内存泄漏?
描述:

Interface:
   GetParm(BSTR* pBstrParm) 
 {
   *pBstrParm = ::SysAllocString("parm");
 }
该接口在DCOM中被调用,在客户端该怎样释放DCOM中分配的内存?
::SysFreeString()在客户端掉用有效吗?
初写这些东西,大家赐教哦!


解决方案1:

有很多种方式都可以的:
1)
BSTR tmp = NULL;
try
{
  InterfacePtr->GetPara(&tmp);
...//处理
}
catch (...)
{
   ::SysFreeString(tmp);
}
2)
{
BSTR tmp;
InterfacePtr->GetPara(&tmp);
_bstr_t Para(tmp, false);
...//处理
} //自动由Para释放掉
偶一般都采用第二种。

解决方案2:

在com中资源的分配释放一般用如下规则:
1.[in]类型的参数资源,调用者分配,调用者释放
2.[out]类型的,被调用者(服务器)分配,调用者释放
3.[in,out]类型的,调用者分配,调用者释放,但是中间被调用者可以重新分配其资源,即新释放旧资源再分配新的资源
*pBstrParm = ::SysAllocString("parm");
应该为:
*pBstrParm = ::SysAllocString(L"parm");
如果上面你的函数在idl中声明参数为[out],那就没错了


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 如何将BSTR转化为LPCSTR类型。。急等。。谢谢
  • 得到_bstr_t类型的字符串请问如何取出其中的一段子字符串啊
  • VC中BSTR类型参数在PB中调用的问题
  • BSTR类型转换不成功,仍然是乱码
  • 在com组件的参数中,如果是BSTR类型输出的,能传输'\0'这个字符吗?
  • BSTR与_bstr_t转换类型与类如何可以转换
  • 将BSTR类型的数据转换为char类型,数据丢失,请问改如何转换?
  • BSTR类型封装在结构中,用WriteFile和ReadFile写的时候遇到问题,想不到解决的办法。
  • BSTR到SafeArray怎么类型转换
  • bstr类型引发的困惑,求助

相关文章

  • 2017-06-05 跨线程调用问题?
  • 2017-06-05 ATL的PS工程当中的ATLAuto__MIDL_TypeFormatString到底是做什么用的?
  • 2017-06-04 我做了一个组件,该怎么引入到我的mfc程序里!
  • 2017-06-05 请问dll中使用modelessdialog的问题
  • 2017-06-05 ListCtrl无法显示图标
  • 2017-06-05 vs2008下串口初始化的问题
  • 2017-06-05 浏览器插件读取特定文件
  • 2017-06-05 一个进程写在共享内存中的数据被另一个进程读出去后的问题
  • 2017-06-04 介绍ATL的书籍下载
  • 2017-06-04 在ActiveX上面放置控件的问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • vcword中插入了一个CommandButton控件,如果截获单击事件
    • 关于任务计划函数RegisterTaskDefinition的疑问
    • 欢迎大家来看看哦,这里是新生带!!!
    • 怎样根据一个进程得到它所对应的窗口?
    • 求助,VC60调用GoogleMap的问题
    • mfc应用程序如何调用domdll
    • 自己编写的浏览器程序点击下载的链接有时会出来一个空白页面,然后弹出系统的文件保存对话框,点击取消后怎么获取消息关闭这个空白页面?
    • 关于服务启动的问题
    • 求助:树形控件的消息
    • 200分求助CoInitializeExNULL,COINIT_MULTITHREADED函数

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有