델파이

델파이 유니코드 체계 TComport 인쇄시 한글 깨짐 해결

미스터몽키 2016. 3. 11. 14:47

델파이 Seattle에서 TComport 를 통해  시리얼단말기(신용카드 단말기) 인쇄시 한글이 깨진다.

 

ComPort1.WriteStr('abcd 1234테스트 페이지 ***********'+ #13#10);

 

기존에 델파이 2007에서 잘되던 부분이다.

 

TStringStream, TBytes  등으로 해결했다는내용도 검색되었지만 내 경우에는 실패했다.

 

결국 CPort.pas 파일의 String 타입을 AnsiString 타입으로 수정해서 해결했다.

 

문자열을 인쇄하는 ComPort1.WriteStr() 함수와 WriteStrAsync 함수를 수정했다.

 

(첫번째)
function TCustomComPort.WriteStr(Str: string): Integer; 

->

function TCustomComPort.WriteStr(Str: Ansistring): Integer;

 

(두번째)

function TCustomComPort.WriteStrAsync(var Str: string; var AsyncPtr: PAsync): Integer; 

->

function TCustomComPort.WriteStrAsync(var Str: Ansistring; var AsyncPtr: PAsync): Integer; 

 

선언 부분도 같이 바꾸었다.

 

CPort.pas 파일만 변경하고  기존 응용프로그램 소스는 수정하지 않아도 잘 인쇄된다.

첨부파일 참고하면 된다. 

 

종합해 보면 유니코드 체계인 델파이 2009 이후 버전에서는 WriteStr 함수의 파라미터 Str 이 String 으로 선언되어 있으므로 UnicodeString 으로 해석된다.

 

CPort.pas 파일을 수정하지 않고 응용프로그램 개발 소스 단에서 AnsiString 변환해도 소용 없었던 것이다.


유니코드가 대세라고 하지만 아직도 많은 장치들과 그것을 연결하는 DLL라이브러리 등은 Ansi 체계라 당분간 혼선은 계속 될 것 같다.

 

CPort_한글문제_AnsiString해결.pas
0.10MB