Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

델파이 11 알렉산드리아에서의 정의(defines)


Recommended Posts

 

As part of my recent DelphiCon 2021 session, Multi-Platform Explorations using Delphi, FMX, Feeds, REST and More, my example code needed to use IFDEFs for some of the uses statements, variable definitions and code. This blog post contains an example of the use of defines when compiling for Windows (Win32/Win64), macOS, iOS and Android platforms. I also include screen shots of the sample output on each platform. You can download all of my talk’s sample projects using the session links above.

지난 DelphiCon 2021에서는 델파이, FMX, Feeds, REST 등을 활용한 멀티 플랫폼 탐색 세션을 진행했는데 이 때 유즈(uses) 절, 변수 정의, 코드에 IFDEF를 사용하는 샘플 코드 작성이 필요했었다. 그래서 이번 글을 통해 정의를 사용하는 예제들을 다루려고 한다. 윈도우(Win32/Win64), 맥OS, iOS, 안드로이드 플랫폼 용으로 컴파일할 때 정의 사용법을 확인할 수 있을 것이다. 그리고 각 플랫폼마다의 샘플 결과물들을 스크린샷으로 확인할 수 있다. 모든 샘플 프로젝트는 위 세션 링크를 클릭해 다운로드 할 수 있다.

 

The simple Delphi FireMonkey application includes a TButton and a TMemo. In the Button’s OnClick event handler the code outputs information about the platform and the compiler defines for each platform.

TButton, TMemo가 있는 간단한 델파이 파이어몽키 애플리케이션이 있다. 버튼의 OnClick 이벤트 핸들러에서 코드는 플랫폼 정보를 출력하고, 컴파일러는 각 플랫폼을 정의한다.

image.png

 

uses
  System.IOUtils;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  case TOSVersion.Platform of
    TOSVersion.TPlatform.pfWindows:
      PlatformPath := 'Windows';
    TOSVersion.TPlatform.pfMacOS:
      PlatformPath := 'macOS';
    TOSVersion.TPlatform.pfiOS:
      PlatformPath := 'iOS';
    TOSVersion.TPlatform.pfAndroid:
      PlatformPath := 'Android';
    TOSVersion.TPlatform.pfWinRT:
      PlatformPath := 'WinRT';
    TOSVersion.TPlatform.pfLinux:
      PlatformPath := 'Linux'
  else
      PlatformPath := 'Unexpected platform'
  end;
 
  Memo1.Lines.Add('TPlatform: '+PlatformPath);
  Memo1.Lines.Add(TOSVersion.ToString);
 
  {$IF DEFINED(IOS)}
    Memo1.Lines.Add('Defined: IOS');
  {$ENDIF}
  {$IF DEFINED(IOS32)}
    Memo1.Lines.Add('Defined: IOS32');
  {$ENDIF}
  {$IF DEFINED(IOS64)}
    Memo1.Lines.Add('Defined: IOS64');
  {$ENDIF}
 
  {$IF DEFINED(ANDROID)}
    Memo1.Lines.Add('Defined: ANDROID');
  {$ENDIF}
  {$IF DEFINED(ANDROID32)}
    Memo1.Lines.Add('Defined: ANDROID32');
  {$ENDIF}
  {$IF DEFINED(ANDROID64)}
    Memo1.Lines.Add('Defined: ANDROID64');
  {$ENDIF}
 
  {$IF DEFINED(MACOS)}
    Memo1.Lines.Add('Defined: MACOS');
  {$ENDIF}
  {$IF DEFINED(MACOS64)}
    Memo1.Lines.Add('Defined: MACOS64');
  {$ENDIF}
  {$IF DEFINED(OSX)}
    Memo1.Lines.Add('Defined: OSX');
  {$ENDIF}
  {$IF DEFINED(OSX64)}
    Memo1.Lines.Add('Defined: OSX64');
  {$ENDIF}
 
  {$IF DEFINED(MSWINDOWS)}
    Memo1.Lines.Add('Defined: MSWINDOWS');
  {$ENDIF}
  {$IF DEFINED(WIN32)}
    Memo1.Lines.Add('Defined: WIN32');
  {$ENDIF}
  {$IF DEFINED(WIN64)}
    Memo1.Lines.Add('Defined: WIN64');
  {$ENDIF}
 
  {$IF DEFINED(LINUX)}
    Memo1.Lines.Add('Defined: LINUX');
  {$ENDIF}
  {$IF DEFINED(LINUX32)}
    Memo1.Lines.Add('Defined: LINUX32');
  {$ENDIF}
  {$IF DEFINED(LINUX64)}
    Memo1.Lines.Add('Defined: LINUX64');
  {$ENDIF}
 
 
  {$IF DEFINED(DCC)}
    Memo1.Lines.Add('Defined: DCC');
  {$ENDIF}
 
  {$IF DEFINED(CONSOLE)}
    Memo1.Lines.Add('Defined: CONSOLE');
  {$ENDIF}
 
  {$IF DEFINED(POSIX)}
    Memo1.Lines.Add('Defined: POSIX');
  {$ENDIF}
  {$IF DEFINED(POSIX32)}
    Memo1.Lines.Add('Defined: POSIX32');
  {$ENDIF}
  {$IF DEFINED(POSIX64)}
    Memo1.Lines.Add('Defined: POSIX64');
  {$ENDIF}
 
  {$IF DEFINED(CPUX86)}
    Memo1.Lines.Add('Defined: CPUX86');
  {$ENDIF}
  {$IF DEFINED(CPUX64)}
    Memo1.Lines.Add('Defined: CPUX64');
  {$ENDIF}
 
  {$IF DEFINED(CPU32BITS)}
    Memo1.Lines.Add('Defined: CPU32BITS');
  {$ENDIF}
 
  {$IF DEFINED(CPU64BITS)}
    Memo1.Lines.Add('Defined: CPU64BITS');
  {$ENDIF}
 
  {$IF DEFINED(CPUARM)}
    Memo1.Lines.Add('Defined: CPUARM');
  {$ENDIF}
  {$IF DEFINED(CPUARM32)}
    Memo1.Lines.Add('Defined: CPUARM32');
  {$ENDIF}
  {$IF DEFINED(CPUARM64)}
    Memo1.Lines.Add('Defined: CPUARM64');
  {$ENDIF}
 
  {$IFDEF DEBUG}
    Memo1.Lines.Add('DEBUG is Defined');
  {$ELSE}
    Memo1.Lines.Add('DEBUG is Not Defined');
  {$ENDIF}
end;

 

각 플랫폼에서의 결과 스크린 샷

image.png   image.png

image.png   image.png

image.png

 

 

 

 

 

 

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

 공유하기

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.