DEVMODE* lv_devmode;
DEVMODE* lv_devmode_2;
PRINTER_INFO_2* lv_printer_info;
LPTSTR lv_str, pDeviceName;
HANDLE phPrinter;
DWORD pcbNeeded, lv_dword;
lv_printer_info = (PRINTER_INFO_2 *)malloc( 1500 );
int k = sizeof(PRINTER_INFO_2);
if (!OpenPrinter(PrinterName, &phPrinter, NULL))
{
free(lv_printer_info);
lv_str = "打开打印机失败 !";
return GetLastError();
}
if (!GetPrinter(phPrinter, 2, (BYTE*)lv_printer_info, 1500, &pcbNeeded ))
{
free(lv_printer_info);
ClosePrinter(phPrinter);
lv_str = "无法得到打印机参数 !";
return GetLastError();
}
lv_devmode = lv_printer_info->pDevMode;
pDeviceName = (char*)&lv_devmode->dmDeviceName[0];
lv_dword = DocumentProperties(0, phPrinter, pDeviceName, lv_devmode, 0, DM_OUT_BUFFER);
if (lv_dword<0)
{
free(lv_printer_info);
ClosePrinter(phPrinter);
lv_str = "无法取得打印机参数 !";
return GetLastError();
}
// 修改DEVMODE结构, 设置纸张大小及其高度和宽度
lv_devmode->dmFields = lv_devmode->dmFields|DM_ORIENTATION|DM_PAPERLENGTH|DM_PAPERWIDTH|DM_PAPERSIZE;
lv_devmode->dmOrientation = DMORIENT_PORTRAIT ;
lv_devmode->dmPaperSize = PaperSize ;
lv_devmode->dmPaperLength = Height;
lv_devmode->dmPaperWidth = Width;
// 通过调用DOCUMENTPROPERTIES函数传会修改的DEVMODE结构,
// 在调用时指定DM_IN_BUFFER|DM_OUT_BUFFER
lv_devmode_2 = (DEVMODE*)malloc( sizeof(DEVMODE) );
lv_dword = DocumentProperties(0, phPrinter, pDeviceName, lv_devmode_2, lv_devmode, DM_IN_BUFFER|DM_OUT_BUFFER);
if (lv_dword<0)
{
free(lv_devmode_2);
free(lv_printer_info);
ClosePrinter(phPrinter);
lv_str = "无法设置打印机参数 !";
return GetLastError();
}
if (!SetPrinter(phPrinter, 2, (BYTE*)lv_printer_info, NULL))
{
free(lv_printer_info);
ClosePrinter(phPrinter);
lv_str = "无法设置打印机参数 !";
return GetLastError();
}
free(lv_devmode_2);
free(lv_printer_info);
ClosePrinter(phPrinter);
// lv_str = "设置打印机参数成功 !";
free(lv_devmode_2);
free(lv_printer_info);这两个释放为什么会出错?各位高手请指点
DEVMODE* lv_devmode_2;
PRINTER_INFO_2* lv_printer_info;
LPTSTR lv_str, pDeviceName;
HANDLE phPrinter;
DWORD pcbNeeded, lv_dword;
lv_printer_info = (PRINTER_INFO_2 *)malloc( 1500 );
int k = sizeof(PRINTER_INFO_2);
if (!OpenPrinter(PrinterName, &phPrinter, NULL))
{
free(lv_printer_info);
lv_str = "打开打印机失败 !";
return GetLastError();
}
if (!GetPrinter(phPrinter, 2, (BYTE*)lv_printer_info, 1500, &pcbNeeded ))
{
free(lv_printer_info);
ClosePrinter(phPrinter);
lv_str = "无法得到打印机参数 !";
return GetLastError();
}
lv_devmode = lv_printer_info->pDevMode;
pDeviceName = (char*)&lv_devmode->dmDeviceName[0];
lv_dword = DocumentProperties(0, phPrinter, pDeviceName, lv_devmode, 0, DM_OUT_BUFFER);
if (lv_dword<0)
{
free(lv_printer_info);
ClosePrinter(phPrinter);
lv_str = "无法取得打印机参数 !";
return GetLastError();
}
// 修改DEVMODE结构, 设置纸张大小及其高度和宽度
lv_devmode->dmFields = lv_devmode->dmFields|DM_ORIENTATION|DM_PAPERLENGTH|DM_PAPERWIDTH|DM_PAPERSIZE;
lv_devmode->dmOrientation = DMORIENT_PORTRAIT ;
lv_devmode->dmPaperSize = PaperSize ;
lv_devmode->dmPaperLength = Height;
lv_devmode->dmPaperWidth = Width;
// 通过调用DOCUMENTPROPERTIES函数传会修改的DEVMODE结构,
// 在调用时指定DM_IN_BUFFER|DM_OUT_BUFFER
lv_devmode_2 = (DEVMODE*)malloc( sizeof(DEVMODE) );
lv_dword = DocumentProperties(0, phPrinter, pDeviceName, lv_devmode_2, lv_devmode, DM_IN_BUFFER|DM_OUT_BUFFER);
if (lv_dword<0)
{
free(lv_devmode_2);
free(lv_printer_info);
ClosePrinter(phPrinter);
lv_str = "无法设置打印机参数 !";
return GetLastError();
}
if (!SetPrinter(phPrinter, 2, (BYTE*)lv_printer_info, NULL))
{
free(lv_printer_info);
ClosePrinter(phPrinter);
lv_str = "无法设置打印机参数 !";
return GetLastError();
}
free(lv_devmode_2);
free(lv_printer_info);
ClosePrinter(phPrinter);
// lv_str = "设置打印机参数成功 !";
free(lv_devmode_2);
free(lv_printer_info);这两个释放为什么会出错?各位高手请指点
若内存分配失败,不可能赋值进去,上边也会出错