ZEBRA Printer XE7 中的 CharPrinter
CharPrinter in ZEBRA Printer XE7
我使用 CharPrinter.pas 单元在 ZPLII 中为 Delphi RAD2007 中的 ZEBRA 打印机发送命令并且一切正常,但我更改为 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;
我使用 CharPrinter.pas 单元在 ZPLII 中为 Delphi RAD2007 中的 ZEBRA 打印机发送命令并且一切正常,但我更改为 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;