• 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 > 急!COM传值的问题,关键代码strXML=strContentcopy;找到原因马上给分!

急!COM传值的问题,关键代码strXML=strContentcopy;找到原因马上给分!

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

佚名通过本文主要向大家介绍了 急!COM传值的问题,关键代码strXML=strContentcopy;找到原因马上给分!等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 急!COM传值的问题,关键代码strXML=strContentcopy;找到原因马上给分!
描述:

我的一个程序调用一个COM里面的方法如下:
BSXML=m_pSetting->Load(CCQRMainApp::GetDataSecurityObj(),bstrUser,bstrName);//-----返回的值,这里的现象比较怪异
BSXML返回一个XML字符串
m_pSetting是那个COM对象,Load函数是这样声名的:
STDMETHOD(Load)(IDispatch *pDataSecurity,BSTR strUser,BSTR strSettingName,/*[out,retval]*/BSTR *strXML);
函数里面是这样得到strXML的:
strC//从数据库中把放在ntext字段中的xml读出来
*strXML=strContent.copy();////这中赋值方法应该没问题
return S_OK;
==============================
现象:load函数中所有的记录都能正确读出来,strXML中也能正确赋值。
我调试跟踪,strXML对应的内存中有正确的内容。
但当load函数返回到主程序的时候,即:BSXML的地址跟strXML地址一样,但load某些记录的时候BSXML地址中的内容变成?????了,请问这是怎么一回事儿啊?我是XP系统,貌似2000下没有这个问题


解决方案1:

把一个已经初始化好的CComBSTR 的地址传给一个函数作为[out]参数会导致内存泄漏。当把CComBSTR用于BSTR*类型的传出参数[out]时,必须首先调用Empty方法清空字符串的内容。
BSXML.Empty();
BSXML=m_pSetting->Load(CCQRMainApp::GetDataSecurityObj(),bstrUser,bstrName);
在把CComBSTR作为[out]参数传递前,调用Empty释必须的。因为按照COM标准中的[out]参数的使用规则-被调用方法不应该在覆盖BSTR的内容前调用SysFreeString。如果你忘记调用Empty,调用前BSTR的内容占用的资源就会泄漏。
对于相同的代码,如果参数类型是[in, out],就不会有泄漏。因为函数会在复制之前,Free原有的串
*strXML=strContent.Detach();
Detach简单的把BSTR移出包装类。这样,在strContent离开作用域的时候就不会被释放。


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

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

  • 急!COM传值的问题,关键代码strXML=strContentcopy;找到原因马上给分!

相关文章

  • 2017-06-05 为什么我的全局钩子只工作在我调用的进程上??加分再问
  • 2017-06-04 有人用过COM+管理接口吗?
  • 2017-06-04 如何将一个已有的工程转换成com组件
  • 2017-06-05 一个简单的线程例子,为什么编译出错???(初学者)
  • 2017-06-05 关于钩子的问题。
  • 2017-06-05 多线程串口通讯,谁能够帮帮我或者给我一个正确的例子?
  • 2017-06-05 如何在vc中链接bcb产生的dll
  • 2017-06-04 Office操作
  • 2017-06-04 当初做wwwgo2mapcom的朋友或者熟悉他的做法的朋友请进来
  • 2017-06-05 奇怪的问题:在vc编辑环境中运行成功,直接运行生成的可执行程序却失败。(注:使用了dll

文章分类

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

最近更新的内容

    • 某指令引用了某某地址,该地址不能为读,怎么回事啊(2地址一样)
    • 在有多个用户登陆的情况下,服务程序如何创建进程?
    • 请介绍一本讲用ALT开发COM的书!
    • 怎样写IE的插件啊?
    • 修改注册表添加服务的问题
    • javascript如何传递一个变量给ATL的DLL
    • 100分!请问我用DuplicateHandle复制文件句柄,原句柄是以写的方式打开的,我怎么可以复制过来的时候加上读的权限?
    • 控制台程序的问题,鼠标点击暂停当前的进程,如何屏蔽???
    • 大家都来看看啊!!!!!!!!
    • 橡皮筋控件加载图片和文本

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

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