大家帮我看一下以下代码错在哪里?

vcmfc 2000-10-26 07:19:00
CPrintDialog prn(FALSE);
prn.GetDefaults();
HANDLE pn;
CString m_drivername,m_devicename;
DEVMODE *print;
m_drivername=prn.GetDriverName();
m_devicename=prn.GetDeviceName();
LPTSTR lp=m_devicename.GetBuffer(m_devicename.GetLength());
LPTSTR lp1=m_drivername.GetBuffer(m_drivername.GetLength());
print=new DEVMODE;
::ZeroMemory(print,sizeof(DEVMODE));
::OpenPrinter(lp1,&pn,NULL);
::DocumentProperties(m_hWnd,pn,lp,print,NULL,DM_OUT_BUFFER);
print->dmFields=DM_PAPERSIZE|DM_ORIENTATION;
print->dmPaperSize=DMPAPER_LETTER;
print->dmOrientation=2;
::DocumentProperties(m_hWnd,pn,lp,NULL,print,DM_IN_BUFFER|DM_OUT_BUFFER);
::ClosePrinter(pn);
m_devicename.ReleaseBuffer();
m_drivername.ReleaseBuffer();
delete print;//该处出错, why?
...全文
107 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcmfc 2000-10-27
  • 打赏
  • 举报
回复
Thank you
erehw 2000-10-27
  • 打赏
  • 举报
回复
错在:print = new ...这一句(这是最大的错误码,还有此外一些小错)
原因则请详参MSN的DocumentProperties的Notes。因为DEVMODE会随设备的不同而大小不同下面有一段小程序,请参考。
CPrintDialog prn(FALSE);
prn.GetDefaults();
HANDLE pn;
CString m_devicename;
DEVMODE *print;
m_devicename=prn.GetDeviceName();
BOOL bOk=::OpenPrinter((LPTSTR)(LPCTSTR)m_devicename,&pn,NULL);
if(!bOk)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
::MessageBox( NULL, (LPTSTR)(LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );

return ;

}
int nSize =DocumentProperties (m_hWnd,pn,(LPTSTR)(LPCTSTR)m_devicename,NULL,NULL,0);
print = (DEVMODE *) malloc(nSize+1);
if(NULL == print) return ;
ZeroMemory(print,nSize+1);
LONG lt=::DocumentProperties(m_hWnd,pn,(LPTSTR)(LPCTSTR)m_devicename,print,NULL,DM_OUT_BUFFER);
print->dmFields=DM_PAPERSIZE|DM_ORIENTATION;
print->dmPaperSize=DMPAPER_LETTER;
print->dmOrientation=2;
lt=::DocumentProperties(m_hWnd,pn,(LPTSTR)(LPCTSTR)m_devicename,NULL,print,DM_IN_BUFFER|DM_OUT_BUFFER);
bOk=::ClosePrinter(pn);
if(!bOk)
{//error please check as above
free(print);
return ;

}

free(print);

16,472

社区成员

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

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

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