程序莫名其妙的崩溃,加断点刚进入函数就崩溃,断点不往下走,读取图片数据到程序并保存到一个HBITMAP 中
HPR_INT32 CCarManageDlg::DrawPic2UIForm(IUIFormObj* pUIForm,string& strPicName)
{//程序崩溃的地方
HPR_INT32 iReval=HPR_ERROR;
char* buff=NULL;
do
{
if (NULL == pUIForm||strPicName=="")
{
CLIENT_ERROR("DrawPic2UIForm into paras is wrong ");
break;
}
//buff= g_MemPool.MemAlloc(PICTURE_SIZE);
char buff[10*1024*1024]={0};//出现崩溃的地方,这里申请的内存太大,线程的堆栈没有这么大的内存所以会在函数刚进入的地方就崩溃,断点都不会往下走;
if (buff ==NULL)
{
CLIENT_ERROR(" g_MemPool.MemAlloc fialed ");
break;
}
HPR_UINT32 iLen=0;
if (ReadFlagPicData(strPicName,buff,iLen)!=HPR_OK)
{
CLIENT_ERROR("ReadFlagPicData failed %s ",strPicName.c_str());
break;
}
char* pData =buff; //(char*)strPicContext.c_str();
int dataLen =iLen;
CImage img;
IStream* pIStream;
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dataLen);
if (!hGlobal)
{
CLIENT_ERROR("GlobalAlloc failed %s ",strPicName.c_str());
break;
}
void* pBuf = GlobalLock(hGlobal);
memcpy(pBuf, (void*)pData, dataLen);
GlobalUnlock(hGlobal);
HRESULT hr = CreateStreamOnHGlobal(hGlobal,TRUE,&pIStream);
if(S_OK == img.Load(pIStream))
{
HBITMAP hBmp = img.Detach();
if (hBmp != NULL)
{
pUIForm->SetBackBitmap((OLE_HANDLE)hBmp);
::DeleteObject(hBmp);
}
}
if (pIStream)
{
pIStream->Release();
}
GlobalFree(hGlobal);
iReval=HPR_OK;
} while (0);
if (iReval!=HPR_OK)
{
if (pUIForm)
{
pUIForm->SetDrawColor(TRUE);
}
}
if (buff!=NULL)
{
g_MemPool.MemRstore(buff);
}
return iReval;
}
HPR_INT32 CCarManageDlg::ReadFlagPicData(string strPicName,char* buff,HPR_UINT32& iLen)
{
HPR_INT32 iReval=HPR_ERROR;
do
{
if (strPicName=="")
{
break;
}
HPR_HANDLE DirFlag=HPR_OpenDir("countryflag");
if (DirFlag==NULL)
{
CLIENT_ERROR("open dir countryflag failed");
break;
}
HPR_FILEFIND_INFO FileInfo;
HPR_Snprintf(FileInfo.sFileName,HPR_MAX_PATH,"%s",strPicName.c_str());
if (HPR_FindFileInDir(DirFlag,&FileInfo)==HPR_ERROR)
{
CLIENT_ERROR("HPR_FindFileInDir %s faild ",strPicName.c_str());
break;
}
strPicName="./countryflag/"+strPicName;
strPicName=strPicName+".png";
HPR_HANDLE hFile=HPR_OpenFile(strPicName.c_str(),HPR_READ,HPR_WREAD);
if (hFile==HPR_INVALID_FILE)
{
CLIENT_ERROR("HPR_OpenFile %s faild ",strPicName.c_str());
break;
}
if (HPR_ReadFile(hFile,buff,PICTURE_SIZE,&iLen)==HPR_ERROR||iLen==0)
{
CLIENT_ERROR("HPR_ReadFile %s faild len %d",strPicName.c_str(),iLen);
break;
}
iReval=HPR_OK;
} while (0);
return iReval;
}
程序莫名其妙的崩溃,加断点刚进入函数就崩溃,断点不往下走,读取图片数据到程序并保存到一个HBITMAP 中的更多相关文章
- ADO.NET入门教程(二)了解.NET数据提供程序
出处:http://www.cnblogs.com/liuhaorain/archive/2012/02/11/2346312.html 1. 什么是.NET数据提供程序? .NET Framewor ...
- Javascript兑现图片预加载【回调函数,多张图片】 (转载)
Javascript实现图片预加载[回调函数,多张图片] 使用JS实现一组图片动画效果或者使用HTML5 Canvas渲染一系列图片等案例中,需要图片全部加载完成方可运行动画效果.此时程序中就会涉及多 ...
- System.BadImageFormatException : 未能加载文件或程序集“Medici.PaymentRecover, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。试图加载格式不正确的程序。
System.BadImageFormatException : 未能加载文件或程序集“xxxxx.xxxxx, Version=1.0.0.0, Culture=neutral, PublicKey ...
- [转]微信小程序之购物数量加减 —— 微信小程序实战商城系列(3)
本文转自:http://blog.csdn.net/michael_ouyang/article/details/70194144 我们在购买宝贝的时候,购物的数量,经常是我们需要使用的,如下所示: ...
- 微信小程序开发动感十足的加载动画--都在这里!
代码地址如下:http://www.demodashi.com/demo/14242.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 简单的自动化使用--使用selenium实现学习通网站的刷慕课程序。注释空格加代码大概200行不到
简单的自动化使用--使用selenium实现学习通网站的刷慕课程序.注释空格加代码大概200行不到 相见恨晚啊 github地址 环境Python3.6 + pycharm + chrom浏览器 + ...
- 微信小程序实现滚动分页加载更多
参考网址:https://www.cnblogs.com/Smiled/p/8203306.html 1.wxml: <view class='myScroll' style='float:le ...
- Linux中为什么执行自己的程序要在前面加./
前言 在Linux中,我们执行内置命令时,直接输入命令名称即可,如: $ mv a b #将a重命名为b 而在执行自己写好的程序时,却要带上./,例如: $ hello hello: comm ...
- Android LruCache 压缩图片 有效避免程序OOM
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9316683 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工, ...
随机推荐
- PyCharm 设置护眼背景色
PyCharm 设置护眼背景色 一.方法 File -> Seting -> Editor -> Color Scheme -> General -> Text -> ...
- 20180307-Xen、KVM、VMware、hyper-v等虚拟化技术的比较
xen和kvm,是开源免费的虚拟化软件. vmware是付费的虚拟化软件. hyper-v比较特别,是微软windows 2008 R2附带的虚拟化组件,如果你买了足够的授权,hyper-v(包括hy ...
- freeswitch刷新网关方法汇总
1.freeswitch xml配置文件新增网关后,使其生效,可以重启freeswitch或者使用命令方式 fs_cli -H 127.0.0.1 -P 8021 -p hmzj -x sofia p ...
- uniGUI试用笔记(八)
在业务系统中常常使用回车键(Enter)替代Tab键完成焦点跳转,在uniGUI下,可以不用代码,直接使用TUniForm的NavigateKeys进行设置: 其中Next和Prior决定了焦点向下一 ...
- Python3 tkinter基础 Label imag显示图片
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- How to Install LibreOffice 6.0 on Ubuntu 16.04 LTS +
1. Add the LibreOffice 6.0 PPA The LibreOffice Fresh PPA is maintained by LibreOffice. It provides l ...
- CentOS7.2中systemctl的使用
CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon,原来管理系统启动和管理系统服务的相关命令全部由systemctl命令来代替. 1.原来的 service 命令与 s ...
- 2018年第九届蓝桥杯B组题C++汇总解析-fishers
2018年第九届蓝桥杯B组题C++解析-fishers 题型 第一题:第几天 第二题:明码 第三题:乘积尾零 第四题:测试次数 第五题:快速排序 第六题:递增三元组 第七题:螺旋折线 第八题:日志统计 ...
- HIHOcoder1465 后缀自动机五·重复旋律8
思路 后缀自动机求最长循环串 首先有一个常用的处理技巧,将串复制一遍,长度大于n的子串中就包含了一组循环子串 然后是后缀自动机如何处理最长公共子串的问题 维护两个变量,u和l,u代表当前位置的最长公共 ...
- Ubuntu 更新系统版本以及查看当前系统版本的命令
1. Ubuntu 查看当前系统版本: lsb_release -a 2. Ubuntu 更新系统版本的命令: sudo do-release-upgrade