我使用CharPrinter.pas单元在Delphi RAD2007中的ZEBRA打印机的ZPLII中发送命令,并且一切正常,但是我更改为XE7,并尝试使用相同的功能并发送至打印机,但不起作用,并且不给任何错误消息。是否必须执行新的数据类型版本XE?
最佳答案
发生这种情况是因为Delphi在Delphi 2009中切换到了Unicode字符串。
Unicode字符串为每个字符使用2个字节。较早的Delphi版本为每个字符使用1个字节。
因此,您必须在ChatPrinter.pas中进行一些更改。
尝试编辑此内容(未测试):
procedure TCharPrinter.SendData (aData : String);
var
Data : array[0..255] of char;
cnt : integer;
ss : TStringStream;
begin
try
ss := TStringStream.Create(aData,TEncoding.ANSI);
fStream.CopyFrom (ss,0);
finally
ss.Free;
end;
// for cnt := 0 to length(aData) - 1
// do Data[cnt] := aData[cnt+1];
end;
或更简单:
procedure TCharPrinter.SendData (aData : String);
var
Data : AnsiString;
begin
Data := AnsiString(aData);
fStream.Write(PAnsiChar(Data)^, Length(Data));
end;