我正尝试在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/