错误提示:"Out of Memory",如何处理??请指点一下……

StarCraftPJF 2007-01-28 02:15:20
vc/mfc Dialog项目,想要实现条形码打印的功能,我自定义了一个画条形码的函数,但是执行的时候,却出现错误提示:"Out of Memory"。代码如下,请帮忙找找错误的地方:
int CtestPrintDlg::Print(LPSTR text, CDC* pDC)//画条形码的函数
{
CPen pen, *pOldPen;
int High,i;
LPSTR str = text;
//设定左上角初始点
CPoint point(50,50);

//就是在执行下面这行代码的时候,出现错误提示“Out of Memory”
pen.CreatePen(PS_SOLID, int(CodeWidth*rato), RGB(0,0,0));

//将画笔选入打印设备环境
pOldPen = pDC->SelectObject(&pen);
High = int(CodeHigh*rato);
while(*str)
{
for (i = 0; i< (*str-'0');i++)
{
pDC->MoveTo(point);
pDC->LineTo(point.x, point.y + High);
point.x += int(CodeWidth*rato);
}
str++;
point.x += int(CodeWidth*rato)*(*str - '0');
str++;
}
pDC->SelectObject(pOldPen);
pen.DeleteObject();//销毁
return 0;
}
...全文
4263 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
QuickGo 2007-01-29
  • 打赏
  • 举报
回复
打个断点,把变量传上来大家分析一下.
StarCraftPJF 2007-01-29
  • 打赏
  • 举报
回复
楼主:
我在贴一下,调用Print函数的代码吧:
void CtestPrintDlg::OnBnClickedPrint()
{
CDC dc;
int CodeName = 0,pq;//打印机质量
LPSTR partial = NULL, text;//接收值
CCode39 code39;//类对象

UpdateData(TRUE);
text = CodeText.GetBuffer(100);


//获取打印机设备环境
if (!(printDlg.DoModal()))
{
//MessageBox("打印错误!");
return;
}
//获取打印机的质量
DEVMODE *dm = printDlg.GetDevMode();
pq = dm->dmPrintQuality;

dc.Attach(printDlg.CreatePrinterDC());
dc.m_bPrinting = TRUE;

CString strTitle;
strTitle.LoadString(AFX_IDS_APP_TITLE);

DOCINFO di;
::ZeroMemory(&di, sizeof(DOCINFO));
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = strTitle;//设置标题

if (dc.StartDoc(&di) == -1)//开始打印
{
//AfxMessageBox("StartDoc错误!");
return;
}
int hor = dc.GetDeviceCaps(HORZRES);
int ver = dc.GetDeviceCaps(VERTRES);

//打印内容
if (code39.Code39Verify(text) == -1)
{
//AfxMessageBox("非法字符!");
return;
}
//分配空间
partial = new char[(strlen(text) + 2)*10];
if (code39.Code39Encode(text,partial) == -1)
{
//AfxMessageBox("编码错误!");
return;
}
dc.StartPage();
//每毫米打印的像素数
rato = float(pq/25.4);
Print(partial, &dc);

dc.EndPage();
dc.EndDoc();
CodeText.ReleaseBuffer();//释放
}
StarCraftPJF 2007-01-29
  • 打赏
  • 举报
回复
楼主:
我断点看了一下变量的值:
rato = 7.9921260, CodeWidth = 0.34999999

再按F10,那么就直接跳到Wincore.cpp文件里的代码:
CATCH_ALL(e)
{
lResult = AfxProcessWndProcException(e, &pThreadState->m_lastSentMsg);
TRACE(traceAppMsg, 0, "Warning: Uncaught exception in WindowProc (returning %ld).\n",
lResult);
DELETE_EXCEPTION(e);
}

请大侠帮忙看看是什么原因??
StarCraftPJF 2007-01-29
  • 打赏
  • 举报
回复
楼主:
有没有人能指点一下啊?????????
chehw 2007-01-28
  • 打赏
  • 举报
回复
(int)(CodeWidth*rato)
StarCraftPJF 2007-01-28
  • 打赏
  • 举报
回复
楼主:
int(CodeWidth*rato) 的值设置为1或者10或者0.01都会出现“Out of Memory”的错误!!!

实在是不解啊,这个问题已经捆饶我好几天了,郁闷……

关注……
cleverwyq 2007-01-28
  • 打赏
  • 举报
回复
是不是调用方式不对,函数貌似没什么问题
dsd999 2007-01-28
  • 打赏
  • 举报
回复
你的这些值设置的多大?
CodeWidth
CodeHigh
rato

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧