我正尝试在Zebra S4M打印机上打印一系列标签,由于某种原因页面高度似乎卡在5厘米上,因此我需要将其设置为6.8厘米。

我正在尝试使用以下代码设置纸张尺寸

var
  FDevice: PChar;
  FDriver: PChar;
  FPort: PChar;
  DeviceMode: THandle;
  DevMode: PDeviceMode;
begin
  {to get a current printer settings}
  Printer.GetPrinter(FDevice, FDriver, FPort, DeviceMode);
  {lock a printer device}
  DevMode := GlobalLock(DeviceMode);
  DevMode^.dmPaperSize := 0;
  DevMode^.dmPaperWidth := fBaseSettings.Width;
  DevMode^.dmPaperLength := fBaseSettings.Height;
  Printer.SetPrinter(FDevice, FDriver, FPort, DeviceMode);
  {unlock a device}
  GlobalUnlock(DeviceMode);
end;


其中fBaseSettings包含目标Label尺寸(除其他外),但我不断收到错误消息
Project SPXLabels.exe raised exception class $C0000005 with message 'access violation at 0x00rred82: write of address 0x59212b17

我看不到我在做什么错!任何帮助,不胜感激。

最佳答案

设备,驱动程序和FPort是指向传递的字符串的指针,以获取数据。因此,您必须首先为此分配内存。
试试这个

var
  FDevice, FDriver, FPort: string;
begin
  SetLength(FDevice, 200);
  SetLength(FDriver, 200);
  SetLength(FPort, 200);
  {to get a current printer settings}
  Printer.GetPrinter(PChar(FDevice), PChar(FDriver), PChar(FPort), DeviceMode);

关于delphi - Printer.GetPrinter在Delphi XE2中引发异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32461215/

10-11 22:43