자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다. 
  • 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)

궁금한 사항이 있어서 문의드립니다.

Delphi7과 Delphi XE에서 아래의 함수를 각각 실행해 보았을 때
Return(sT)값이 서로 틀리게 넘어오는데 
왜 그런지 확인 부탁드립니다.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdTCPClient: TIdTCPClient;
    Button2: TButton;
    Button3: TButton;
    edtIp: TEdit;
    edtPort: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    lStatus: TPanel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

const
  STX = #$02;
  ETX = #$03;

  LF = #$0A; // Line Feed
  CR = #$0D; // Carriage Return
  SO = #$0E; // 확대적용
  SI = #$0F; // 확대취소


implementation

{$R *.DFM}

// CRC를 계산해 준다
function funGetCrc( lsData : String ) : String;
var crc,temp  : Word;
    lnI,lnJ,lnL : Integer;
    SEED : word;
begin

  SEED := $8005;
  crc  := $ffff;

  if Length(lsdata) = 0 then
  begin
    result := #$00#$00;
    Exit;
  end;

  lnL := length(lsData);

  for lnI := 1 to  lnL do
  begin
    temp := byte(lsData[lnI]) and $00ff;
    for lnJ := 1 to 8 do
    begin
      if  ((crc and $0001) xor (temp and $0001)) <> $0000 then
      begin
         crc := (crc shr 1) xor SEED;
      end else
      begin
         crc := (crc shr 1);
      end;
      temp := (temp shr 1);
    end;
  end;

  result := chr(low(Temp)) + chr(low(crc)) ;

  crc    := not crc;
  temp   := crc;
  crc    := (crc shl 8) or ((temp shr 8) and $00ff);

  temp   := (crc shr 8);
  crc    := (crc shl 8);
  crc    := (crc shr 8);

  result := chr(Temp) + chr(crc);

end;


function funMakePrt( PrtFileName, PrtData : String ) : String;
var
  sT : String;
  iT : integer;
begin
  SetLength(sT,17);
  FillChar(Pointer(sT)^,17,' ');
  Move(Pointer(PrtFileName)^,Pointer(sT)^,Length(PrtFileName));

  sT := sT + FormatFloat('0000',Length(PrtData)) + PrtData ;
  iT := Length(sT);
  sT := Chr((iT shr 8)) + Chr((iT and $ff)) + 'P' + sT + #$03;

  Result := #$02 + sT + funGetCrc(sT);
end;




procedure TForm1.Button1Click(Sender: TObject);
var
  Command: string;
  sSendStr: string;
  sPrtFileName: string;
begin
  Command := 'C' + CR + LF;
  Command := Command + 'T110' + '일반' + CR + LF;
  Command := Command + 'T110' + SO + '가로확대' + SI + CR + LF;
  Command := Command + 'T110' + SO + '세로확대' + SI + CR + LF;
  Command := Command + 'T110' + SO + '가로세로확대' + SI + CR + LF;
  Command := Command + 'L50' + CR + LF; // 라인피드 5회
  Command := Command + 'PC' + CR + LF; // 프린트 & 컷팅

  sPrtFileName := 'A123456' + FormatDatetime('MMddhhmmss',Now);

// 1.  델파이7에서 실행했을 때와 델파이 XE에서 실행했을 때의 함수 리턴값(=sSendStr)이 서로 틀립니다.
  sSendStr := funMakePrt(sPrtFileName, Command);

// 2. 아래의 코드를 XE에서 실행하면 오류가 발생을 하는데
//   XE에서 실행하려 하면 어떻게 변경해야 하는지요.. 
  IdTcpClient.Socket.Send(pointer(sSendStr)^,length(sSendStr));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  with IdTcpClient do
  begin
    Host := edtIp.Text;
    Port := StrToInt(edtPort.Text);
    try
      Connect;
      if Connected then
      begin
        lStatus. Caption := '연결성공';
      end;
    except
      MessageDlg('TS-163N 단말기 연결 실패', mtInformation, [mbOk], 0);
    end;
  end;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
//  IdTcpClient.Socket.InputBuffer.Clear;
  IdTcpClient.Disconnect;
  lStatus.Caption := '';

end;

end.

번호 제목 글쓴이 날짜 조회 수
공지 [프로그래밍 강의] 2021.6~2021.12 관리자 2015.01.22 15634
공지 유용한 관련 사이트 관리자2 2014.03.20 54464
공지 본 게시판은 개발자 여러분들의 질문과 답변을 공유하는 공간입니다. 관리자 2012.01.10 97828
779 [XE8 출시세미나] 앱 애널리틱스 (App Analytics)에는 통계만 저장되나요? 아니면 각 사용자 고유의 정보도 저장되나요? [1] 관리자 2015.04.30 207
778 [XE8 출시세미나] 파이어몽키로 만들지 않은 안드로이드 앱을 델파이에서 로딩하고 데이터를 주고 받을 수 있나요? [1] 관리자 2015.04.30 289
777 [XE8 출시세미나] EMS Analytics와 AppAnalytics는 다른건가요? [1] Humphery 2015.04.30 158
776 [XE8 출시세미나] MDM(모바일 단말관리) 솔루션과 연동할 수 있나요? [1] Humphery 2015.04.30 210
775 [XE8 출시세미나] 파이어몽키 앱에서 안드로이드 라이브러리에 포함된 화면(Activity)를 연동하려면 어떻게 하나요? [1] Humphery 2015.04.30 355
774 [XE8 출시세미나] 멀티-디바이스를 지원하기 위해 FMX로 넘어가려고 합니다. 과도기에 VCL 과 FMX를 섞어서 사용할 수 있나요? 관리자 2015.04.30 247
773 [XE8 출시세미나] EMS 푸쉬에서 클라이언트에서 푸쉬메시지 수신확인이 가능한가요? [1] Humphery 2015.04.30 739
772 [XE8 출시세미나] 애플의 핼스킷과 연동할 수 있나요? [1] Humphery 2015.04.30 221
771 [XE8 출시세미나] XE8에서 리눅스를 지원하나요? [1] Humphery 2015.04.30 188
770 [XE8 출시세미나] 추가된 Native HTTP Client가 압축과 암호화를 지원하나요? [1] Humphery 2015.04.30 313
769 [XE8 출시세미나] 델파이로 웹개발도 할 수 있나요? [1] Humphery 2015.04.30 498
768 [XE8 출시세미나] 곧 출시되는 iWatch를 XE8에서 지원하나요? [1] Humphery 2015.04.30 219
767 [XE8 출시세미나] ImageList가 어떤부분이 강화됐나요? [1] Humphery 2015.04.30 294
766 [XE8 출시세미나] XE8에서 윈도우10 버전을 지원하나요? [1] Humphery 2015.04.30 351
765 [XE8 출시세미나] Zigbee, RFID등읜 인터페이스도 있는데 왜? 비콘을 먼저 지원한건가요? [2] Humphery 2015.04.30 367
764 [XE8 출시세미나] 비콘의 종류가 매우 다양한데요 엠바카데로에서 테스트한 케이스는 얼마나 되나요? [1] Humphery 2015.04.30 343
763 [XE8 출시세미나] 코드분석 기능이 유용한것 같은데 C++빌더에서는 언제 지원하나요? [1] Humphery 2015.04.30 290
762 [XE8 출시세미나] 안드로이드 앱에서 메모리 릭(누수)을 점검하려면 어떻게 하나요? [1] Humphery 2015.04.30 464
761 [XE8 출시세미나] 데이터스냅도 배포비용이 발생하나요? [1] Humphery 2015.04.30 230
760 [XE8 출시세미나] 물리엔진인 Box2D를 모바일에서도 사용할 수 있나요? [1] Humphery 2015.04.30 251