2015-07-07 2 views
2

Я использовал блок CharPrinter.pas для отправки команд в ZPLII для принтера ZEBRA в Delphi RAD2007, и все сработало хорошо, но я перехожу на XE7 и пытаюсь использовать те же функции и отправлять на принтер и не работает и не дает сообщений об ошибках. Нужно ли выполнять новые типы данных XE?CharPrinter в принтере ZEBRA XE7

+0

Может быть очень хорошо. Если вы говорите о [этой CharPrinter.pas] (https://github.com/celioeduardo/delphi-sistemas/blob/master/Comum/Generico/CharPrinter.pas), то оно имеет последнее обновление где-то около Delphi 7, поэтому он не получил ни одной из версий unicode более высоких версий. Поскольку он работает с потоками, он может легко прекратить делать что-либо, когда он встречает первый # 0, который является частью многобайтового символа. – GolezTrol

ответ

4

Это произошло, потому что Delphi переключился на строки Unicode в Delphi 2009. Строки 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; 
+1

Этот код можно упростить, назначив 'aData' локальной переменной' AnsiString' 'aStr', а затем записать ее в поток, используя' fStream.Write (PAnsiChar (aStr) ^, Length (aStr)); '. Я немного удивлен, что исходный код до Unicode уже не делал этого, во-первых, не было причин для копирования ввода 'String' в локальный массив' Char [] 'перед его написанием. –

+0

Да, вы правы, спасибо за редактирование –

+0

Большое спасибо! Решение, которое вы сообщили, прекрасно работает - Реми Лебо и Шади Аджам – DevDelphi

Смежные вопросы