FreePascal Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
FreePacal 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

FreePascal 강좌/문서
[6] 라자루스를 이용한 업무 프로그램 개발 - 5
어느좋은날 [freepascal] 610 읽음    2020-06-13 22:41
1-3. 공용 라이브러리

공통으로 사용되는 함수와 변수, 상수들은 모아서 하나의 파일에 넣는다. 파일버전은 첫번째와 두번째 자리까지만 받아서 버전 관리에 사용한다. Revision, 혹은 Build 정보까지 필요하다면 버전 정보를 가져오는 함수와 DB의 버전정보 관리 Table을 수정해서 사용해야한다.
unit simlaz_lib;

{$mode objfpc}{$H+}

interface

uses
  windows, Classes, SysUtils, IdGlobal;

const
  SIMLAZ_EOF = #9; // 전송항목간 구분자

  // 송/수신 구분자
  smlc_VERSION   = Ord('A'); // 버전 정보
  smlc_USERLIST  = Ord('B'); // 접속자 목록
  smlc_LOGIN     = Ord('C'); // 로그인
  smlc_OPENQUERY = Ord('D'); // Open Query
  smlc_EXECQUERY = Ord('E'); // Execute Query
  smlc_GETFILE   = Ord('F'); // 파일 다운로드
  smlc_ERROR     = Ord('X'); // Error
  smlc_CONNECT   = Ord('Y'); // 접속응답
  smlc_DUMMY     = Ord('Z'); // Dummy

function GF_SIMLazFVer(AFileName: string): string; // 파일버전 가져오기
procedure GP_SIMLazDec(var AValue: TIdBytes); // 데이터 해독
procedure GP_SIMLazEnc(var AValue: TIdBytes); // 데이터 암호화

// 송/수신 오류 메세지
resourcestring
  ERR_SIMLAZ001 = '접근이 허용되지 않았습니다!';
  ERR_SIMLAZ002 = '잘못된 요청입니다!';
  ERR_SIMLAZ003 = '처리할 자료가 없습니다!';

  ERR_SIMLAZ101 = '사용 권한이 없습니다!';
  ERR_SIMLAZ102 = '암호가 잘못 되었습니다!';

  ERR_SIMLAZ201 = '전송할 파일이 존재하지 않습니다!';

  ERR_SIMLAZ301 = '수신된 데이터가 없습니다!';
  ERR_SIMLAZ302 = '서버에 연결되어 있지 않습니다!';
  ERR_SIMLAZ303 = '데이터 전송도중 오류가 발생하였습니다!';

  ERR_SIMLAZ999 = '알 수 없는 오류가 발생하였습니다!';

implementation

// 파일버전 가져오기
function GF_SIMLazFVer(AFileName: string): string;
var
  VerInfo: Pointer;
  VerValue: PVSFIXEDFILEINFO;
  VerInfoSize, VerValueSize, Dummy: DWORD;
begin
  Dummy := 0;
  VerValue := nil;
  VerValueSize := 0;
  VerInfoSize := GetFileVersionInfoSize(PChar(AFileName), Dummy);
  GetMem(VerInfo, VerInfoSize);
  GetFileVersionInfo(PChar(AFileName), 0, VerInfoSize, VerInfo);
  VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
  with VerValue^ do
  begin
    Result := IntToStr(dwFileVersionMS shr 16);
    Result := Result + '.' + IntToStr(dwFileVersionMS and $FFFF);
  end;
  FreeMem(VerInfo, VerInfoSize);
end;

// 데이터 해독
procedure GP_SIMLazDec(var AValue: TIdBytes);
var
  i, l, x, k: Int32;
begin
  l := Length(AValue);
  if l <= 0 then Exit;

  k := (l mod 100) + 21;
  for i := 0 to l - 1 do
  begin
    x := AValue[i] - k;
    if x < 0 then x := x + 256;
    AValue[i] := UInt8(x);
  end;
end;

// 데이터 암호화
procedure GP_SIMLazEnc(var AValue: TIdBytes);
var
  i, l, x, k: Int32;
begin
  l := Length(AValue);
  if l <= 0 then Exit;

  k := (l mod 100) + 21;
  for i := 0 to l - 1 do
  begin
    x := AValue[i] + k;
    if x > 255 then x := x - 256;
    AValue[i] := UInt8(x);
  end;
end;

end.

+ -

관련 글 리스트
6 라자루스를 이용한 업무 프로그램 개발 - 5 어느좋은날 610 2020/06/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.