• 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 > 请大侠帮忙,。。。。。。。。。。。。。急,在线等

请大侠帮忙,。。。。。。。。。。。。。急,在线等

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

佚名通过本文主要向大家介绍了 请大侠帮忙,。。。。。。。。。。。。。急,在线等等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 请大侠帮忙,。。。。。。。。。。。。。急,在线等
描述:

我做的一个variant 中是一个一维的safearray,bstr类型,在一个函数中赋值代码如下:for (long l= aDim[0].lLbound; l< (long)(aDim[0].cElements + aDim[0].lLbound); l++) { 
CspTextLength = cspGetBarcode(szCspText, l, sizeof(szCspText));
          VARIANT vOut;
VariantInit(&vOut);
vOut.vt= VT_BSTR;
BSTR b=_com_util::ConvertStringToBSTR(szCspText);
vOut.bstrVal=::SysAllocString(b); 
aLong[0]= l;  // set index value
if (hr= SafeArrayPutElement(pSA, aLong, &vOut)) 
           { 
   VariantClear(&vOut);  // release BSTR from memory on error
   SafeArrayDestroy(pSA); // does a deep destroy on error
// return hr;
  }
VariantClear(&vOut);  // does a deep destroy of source VARIANT
} // end iteration
value.parray=pSA;
value.vt = VT_ARRAY|VT_BSTR;
然后此函数返回value,
在另一个函数读数据,参数就是上面函数的返回值,代码如下:
          BSTR pvData ;
 VARIANT* temp1=0;
          HRESULT hr;
char  *p=0;
hr=::SafeArrayAccessData(value.parray, (void **)&temp1);
pvData=temp1[2].bstrVal;
p=_com_util::ConvertBSTRToString(pvData);
在hr=::SafeArrayAccessData(value.parray, (void **)&temp1);这句中,好像Value.parray有问题,不能正确取出数据,在执行pvData=temp1[2].bstrVal时,系统报错,然后退出,我猜是value中的数组有问题,好像内存已经释放了,请高手帮忙指导,在线等。急,,,,,,谢谢,


解决方案1:

value.parray=pSA;
value.vt = VT_ARRAY|VT_BSTR;
为什么要加VT_BSTR?value也不知道你的array里是bast
如果你加了这个返回的时候会作为bstr来处理,而不是array pointer
或者返回值改为SAFEARRAY

解决方案2:

if (hr= SafeArrayPutElement(pSA, aLong, &vOut)) //看看这块的hr的值
           { 
   VariantClear(&vOut);  // release BSTR from memory on error
   SafeArrayDestroy(pSA); // does a deep destroy on error
// return hr;
  }
还有这里不用这样:
BSTR pvData ;
 VARIANT* temp1=0;
          HRESULT hr;
char  *p=0;
hr=::SafeArrayAccessData(value.parray, (void **)&temp1);
pvData=temp1[2].bstrVal;
p=_com_util::ConvertBSTRToString(pvData);
直接:
         BSTR *pvData ;  
         HRESULT hr;
char  *p=0;
hr=::SafeArrayAccessData(value.parray, (void **)&pvData );//最好跟一下看看value.parray里面有值没有?
p=_com_util::ConvertBSTRToString(pvData[2]);

解决方案3:

第一:你可以检查赋值是否成功,每个函数的返回值都要检查.第二,SAFEARRAY中可以直接存BSTR,你为何又要加一层VARIANT(即varout),第三,访问时hr有问题,数据当然取不出来!其他问题暂时看不出来,要不你发(最小代码:赋值与调用两个函数加一个主函数)给我,我来调试:liuchanghua0010@hotmail.com

解决方案4:

我帮你抗。我接触这个东西不多。value.parray=pSA;这么写法是不是不太对劲?这个pSA从哪里来的?


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

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

  • 请大侠帮忙!!先用shellexecute打开一个文件,在关闭此文件时如何删除它??
  • 请大侠帮忙,。。。。。。。。。。。。。急,在线等

相关文章

  • 2017-06-04 急救:请问怎样可以用鼠标获取IE中frame里的图片
  • 2017-06-05 文件的读写互斥实现有好想法的进!
  • 2017-06-05 难题求助(急!):VC/MFC,使用AutoCADActivex接口提供的GetPoint()函数问题函数的问题
  • 2017-06-04 用CoCreateInstance产生对象时,出现如下错误,请高手指点
  • 2017-06-05 关于SendMessage和PostMessage的问题
  • 2017-06-04 窗口中的activex控件显示不出??
  • 2017-06-04 真的是不明白啊,弄不出来,请您指教,非常感谢!
  • 2017-06-05 ATL编译出来的COM组件,并没有实现IDispatch::Invoke,也可以被vbs调用,为什么
  • 2017-06-04 一个关于Word加载ActiveX显示图片的问题,请教高人
  • 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
  • 微信公众号

最近更新的内容

    • 我建立的Win32Application工程中如何导入本机已经存在的COM组件并调用?
    • 如何获得ActiveX控件的窗口句柄?
    • COM的调用
    • 為什么用兩個线程去调用同一个类中的变量,两个线程调用时产生的变量的值应是不一样的,但我在线程中得到的值却是一样的呢?
    • ActiveX控件接受参数或属性的数据类型问题,我想传入ImageList或是CImageList对象如何实现呢?
    • 请教使用MSMQ的问题
    • “一键呼出“问题!
    • 请问如何在ODBC中使用多线程?
    • opengl在多线程中的使用问题
    • com注册问题

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

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