C++빌더 VCL 애플리케이션에서 Python4Delphi 활용하기
- 2021-06-08
- Posted by: Narae Kim
- Categories: 기술자료, 메인 노출
- 원문 링크: https://davidiontools.com/2020/10/13/using-python4delphi-with-cbuilder-vcl-applications/
- 작성자(작성일): 데이비드 아이 (2020.10.13)
C++ 개발자들 중에 파이썬을 사용하는 분들이 있습니다. 두 언어를 통합하는 방법에는 여러가지가 있습니다. 한 가지는 새로운 객체 유형과 기능을 구현하는 C++ 함수가 포함되어 있는 파이썬(Python) 확장 모듈을 만드는 것입니다. 또 다른 방법은 Boost Python C++ 라이브러리를 사용해 파이썬과 C++ 언어 간의 상호 운용성을 지원하는 것입니다. 세 번째로 C++빌더와 파이썬을 통합하기 위해 컴포넌트들의 생산성, 복원력, 캡슐화를 활용하는 것입니다. 이번 글에서는 VCL 애플리케이션에서 Python4Delphi 오픈 소스 구성 요소를 활용하는 방법에 대해서 설명해보려고 합니다.
Python4Delphi 란?
Python for Delphi (P4D)는 무료 컴포넌트 셋으로 (MIT 오픈 소스 라이선스), PyScripter Python IDE를 개발한 Kiriakos Vlahos가 만들었습니다. 이 컴포넌트를 사용해 델파이와 C++빌더 애플리케이션을 확장해서 파이썬 스크립트를 실행하고, 새로운 파이썬 모듈과 파이썬 유형을 만들 수 있습니다. 파이썬 확장을 DLL 등으로 만들수도 있습니다. 더 자세한 내용은 www.devgear.co.kr/archives/3660 에서 확인할 수 있습니다.
윈도우용 파이썬 설치하기 (32비트와 64비트)
C++빌더 VCL용 애플리케이션에서 Python4Delphi를 사용하기 전에, PC에 Win32, Win64용 파이썬이 설치되어 있는지 확인하세요.
Python.org 웹사이트를 통해서 파이썬을 다운로드 받아 설치할 수 있습니다. Win32, Win64용 설치 파일은 다음 링크를 활용하세요: www.python.org/downloads/windows/
PC에 설치되어 있는 파이썬 배포 파일은 윈도우 커맨드 창에서 “where python.exe”를 사용해서 확인할 수 있습니다.
기본적으로 Win32용 파이썬은 다음 경로에 설치됩니다: C:\Users\(사용자 이름)\AppData\Local\Programs\Python\Python39-32\folder (또는 설치 시 지정한 경로)
Win64용 파이썬의 기본 설치 경로는 다음과 같습니다: C:\Users\(사용자 이름)\AppData\Local\Programs\Python\Python39\folder (또는 설치 시 지정한 경로)
Python4Delphi 설치와 컴포넌트들 활용하기
C++빌더 10.3.3, 10.4, 10.4.1버전에서 Python4Delphi를 사용하는 방법에 대해서 차근차근 설명해보려고 합니다. 이 글에서는 RAD스튜디오(델파이와 C++빌더가 모두 포함된 제품)를 사용했습니다.
Step 1 – Python4Delphi 최신 버전 다운로드
python4delphi-master.zip 파일을 다운로드 받아(github.com/pyscripter/python4delphi) 하드 드라이브에서 압축을 풀어놓으세요 (데이비드 아이는 다음 경로의 파일을 이용했습니다: C:\Users\david\Documents\Embarcadero\Studio\Projects/ folder)
Step 2 – IDE에서 Python_D 패키지 프로젝트 파일 열기
C++빌더 10.4.1에서 Python_D.dproj 패키지 프로젝트 파일을 열어보세요 (“python4delphi-master\Packages\Delphi\Delphi 10.4+” 경로의 폴더에서 찾으실 수 있을 거에요).
Step 3 – DesignIDE 유닛과 $IFDEF 추가하기
Python_D.dpk 소스 파일을 열어보면 DesignIDE 유닛에 $IFDEF가 없는 걸 확인하실 수 있을텐데요. Win64 C++ 컴파일러를 사용할 때 컴파일 에러가 발생하지 않도록 하기 위해서는 꼭 추가해주어야 합니다.
델파이 컴파일러 명령어인 LIB suffix는 “AUTO”로 설정되어 있는지 확인하세요. 다른 컴파일된 패키지 파일들을 패키지 파일 접미사와 일치시키고 싶다면 소스 코드 또는 Project | Options | Description 메뉴 (아래 이미지 참고)에서 설정할 수 있습니다. 접미사는 파일 확장자 앞에 적용됩니다. 드롭다운 목록에서 $(Auto) 옵션을 선택하는 방법도 있습니다.
10.3 또는 그 이전 버전의 경우 다음 경로에서 별도의 Python_D.dpk 패키지 소스 파일을 사용하면 됩니다: python4dlephi-master\Packges\Delphi\Delphi 10.3-
이 패키지 소스 파일에는 $IFDEF 가 있어 최신 델파이 컴파일러에 대한 LIB suffix를 설정할 수 있습니다.
이전 Python_D.dpk 프로젝트를 사용하는 경우, 패키지 원본 파일 앞에 있는 {$R*.res} 문을 주석 처리하거나 삭제해야 할 수도 있습니다 (Python4Delphi 최신 커밋된 버전에서는 삭제되어있을 수도 있습니다).
Step 4 (a) – RAD스튜디오에 Python4Delphi 컴포넌트 설치하고 빌드하기
사용할 개발도구가 RAD스튜디오인지 C++빌더인지에 따라 컴포넌트 설치 및 빌드 방법이 두 가지가 있습니다. C++빌더를 사용한다면 “Step 4 (b)”는 건너뛰어도 됩니다.
Python4Delphi 프로젝트 옵션 설정이 필요한데요. Delphi Compiler | C/C++ Output file generation 메뉴로 들어가서 Win32와 Win64 플랫폼에 대한 설정을 해주면 됩니다. (all configurations – debug and release 를 선택하세요). 이제 Win32와 Win64용 Python4Delphi 컴포넌트들을 설치하고 빌드합니다.
컴포넌트 빌드 & 설치가 완료되면 C++ VCL Win32와 Win64 프로젝트들에 맞게 생성된 C++ 헤더 파일, 패키지 임포트 라이브러리 파일, 패키지 정적 라이브러리 파일들을 확인할 수 있습니다.
Help 파일에서: “Generate all C++Builder files (including package libs)” 옵션을 선택하세요. 그러면 모든 델파이 관련 패키지들이 생성됩니다 – C++ 프로젝트에 대한 필요한 모든 헤더 파일 (.hpp), 패키지 임포트 라이브러리 파일 (.bpi), 패키지 정적 라이브러리 파일 (.lib와 .a)들. 이는 데스크탑 플랫폼의 기본입니다.
델파이 컴파일러 검색 경로(Delphi Compiler Search Path)에 Python4Delphi 소스 디렉토리를 포함하도록 설정하세요. 이제 컴파일러가 필요한 파일들을 찾을 수 있습니다.
Step 4 (b) – 델파이 커맨드 라인 컴파일러를 사용해 컴포넌트 설치&빌드하기
Win32 (DCC32.exe)와 Win64 (DCC64.exe)용 델파이 커맨드 라인 컴파일러를 실행할 배치 파일(또는 다른 스크립트 파일들)을 활용할 수 있습니다. 이러한 델파이 컴파일러들(bin 폴더에 포함되어 있음)은 Python4Delphi 패키지 파일을 빌드하고, C++ 애플리케이션에서 사용할 때 필요한 C++ 헤더 파일, 컴파일된 패키지 파일, 정적 라이브러리, 기타 파일들을 생성할 수 있습니다.
CompilePython4DelphiPackage4Win32.bat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@ECHO OFF ECHO Compiling Python4Delphi Component Package for Win32 dcc32 Python_D.dpk ^ -I"C:\Users\david\Documents\Embarcadero\Studio\Projects\Python4Delphi\python4delphi-master\Source" ^ -LE"C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl" ^ -LN"C:\Users\Public\Documents\Embarcadero\Studio\20.0\Dcp" ^ -NH"C:\Users\Public\Documents\Embarcadero\Studio\20.0\hpp\Win32" ^ -NB"C:\Users\Public\Documents\Embarcadero\Studio\20.0\Dcp" ^ -E"C:\Users\Public\Documents\Embarcadero\Studio\20.0\Dcp" ^ -JL ^ --lib-suffix:260 ^ -NSsystem;vcl;winapi;system.win ^ -u"c:\program files (x86)\embarcadero\studio\20.0\lib\win32\release" move /y "C:\Users\david\Documents\Embarcadero\Studio\Projects\Python4Delphi\python4delphi-master\Packages\Delphi\Delphi 10.3-\Python_D.lib" "C:\Users\Public\Documents\Embarcadero\Studio\20.0\Dcp\Python_D.lib" ECHO Completed Python4Delphi Component Package Win32 pause |
CompilePython4DelphiPackage4Win64.bat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@ECHO OFF ECHO Compiling Python4Delphi Component Package for Win64 dcc64 Python_D.dpk ^ -I"C:\Users\david\Documents\Embarcadero\Studio\Projects\Python4Delphi\python4delphi-master\Source" ^ -LE"C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\Win64" ^ -LN"C:\Users\Public\Documents\Embarcadero\Studio\20.0\Dcp\Win64" ^ -NH"C:\Users\Public\Documents\Embarcadero\Studio\20.0\hpp\Win64" ^ -NB"C:\Users\Public\Documents\Embarcadero\Studio\20.0\Dcp\Win64" ^ -E"C:\Users\Public\Documents\Embarcadero\Studio\20.0\Dcp\Win64" ^ -JL ^ --lib-suffix:260 ^ -NSsystem;vcl;winapi;system.win ^ -u"c:\program files (x86)\embarcadero\studio\20.0\lib\win64\release" move /y "C:\Users\david\Documents\Embarcadero\Studio\Projects\Python4Delphi\python4delphi-master\Packages\Delphi\Delphi 10.3-\Python_D.a" "C:\Users\Public\Documents\Embarcadero\Studio\20.0\Dcp\Win64\Python_D.a" ECHO Completed Python4Delphi Component Package Win64 pause |
Python4Delphi 패키지 설치
C++빌더 IDE에서 Components | Install Packages 메뉴 아이템을 선택 후 “Add…” 버튼을 클릭하세요.
다음 경로 C:\Users\Public\Documents\Embarcadero\Studio\21.0\Bpl 폴더 (폴더 경로 중간의 숫자는 C++빌더 버전에 따라서 다를 수 있습니다)로 들어가서 Design time package (BPL) 파일을 선택한 후 Open 버튼을 클릭하세요. 그러면 IDE에 패키지와 컴포넌트들이 추가됩니다. Design time package 리스트에서 “Components for Python”이 표시됩니다. 패키지의 컴포넌트 리스트를 표시해 줄 컴포넌트(Components) 버튼을 클릭하세요.
Step 4 (c) – C++에서 사용 가능한 Python4Delphi 파일들이 생성되었는지 확인하기
Win32와 Win64 대상 플랫폼용 Python4Delphi 패키지 프로젝트를 컴파일하면 다음의 파일들이 생성됩니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
C:\Users\Public\Documents\Embarcadero\Studio\21.0\hpp\Win32 Python_D.hpp PythonEngine.hpp PythonGUIInputOutput.hpp MethodCallBack.hpp WrapDelphi.hpp C:\Users\Public\Documents\Embarcadero\Studio\21.0\hpp\Win64 Python_D.hpp PythonEngine.hpp PythonGUIInputOutput.hpp MethodCallBack.hpp WrapDelphi.hpp C:\Users\Public\Documents\Embarcadero\Studio\21.0\Dcp Python_D.bpi Python_D.dcp Python_D.lib C:\Users\Public\Documents\Embarcadero\Studio\21.0\Dcp\Win64 Python_D.a Python_D.bpi Python_D.dcp C:\Users\Public\Documents\Embarcadero\Studio\21.0\Bpl Python_D270.bpl C:\Users\Public\Documents\Embarcadero\Studio\21.0\Bpl\Win64 Python_D270.bpl Python_D270.rsm |
IDE의 컴포넌트 팔레트(Component Palette) 화면에 컴포넌트들이 뜨는 걸 확인할 수 있을 것입니다:
C++빌더 Python4Delphi VCL 애플리케이션을 만들어볼까요?
RAD스튜디오에서 Python4Delphi Demo1 델파이 프로젝트 파일을 열고 컴포넌트들이 정상적으로 전부 뜨는지, 파이썬이 작동하는지를 테스트합니다.
경로: C:\User\david\Documents\Embarcadero\Studio\Projects\Python4Dlephi\python4delphi-master\Demos\Demo01
File | New | C++Builder VCL application 경로에서 C++빌더 프로젝트를 만들어보겠습니다 (Note: 프로젝트에 대한 소스 코드는 참조(Reference) 섹션에 나열되어 있는 압축(zip) 파일에 있습니다). Demo01 폼 파일의 델파이 버전에서 모든 컴포넌트들을 복사했습니다.
Demo01Unit.dfm 파일
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
object Form2: TForm2 Left = 0 Top = 0 Caption = 'Demo 01 Python (C++, VCL)' ClientHeight = 344 ClientWidth = 534 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Splitter1: TSplitter Left = 0 Top = 153 Width = 534 Height = 3 Cursor = crVSplit Align = alTop Color = clBtnFace ParentColor = False ExplicitWidth = 536 end object Memo1: TMemo Left = 0 Top = 156 Width = 534 Height = 144 Align = alClient Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -13 Font.Name = 'Consolas' Font.Pitch = fpVariable Font.Style = [] Lines.Strings = ( 'print(2+2)') ParentFont = False ScrollBars = ssBoth TabOrder = 0 end object Panel1: TPanel Left = 0 Top = 300 Width = 534 Height = 44 Align = alBottom BevelOuter = bvNone TabOrder = 1 object Button1: TButton Left = 0 Top = 6 Width = 115 Height = 25 Caption = 'Execute script' TabOrder = 0 OnClick = Button1Click end object Button2: TButton Left = 167 Top = 6 Width = 91 Height = 25 Caption = 'Load script...' TabOrder = 1 OnClick = Button2Click end object Button3: TButton Left = 264 Top = 8 Width = 89 Height = 25 Caption = 'Save script...' TabOrder = 2 OnClick = Button3Click end end object Memo2: TMemo Left = 0 Top = 0 Width = 534 Height = 153 Align = alTop Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -13 Font.Name = 'Consolas' Font.Pitch = fpVariable Font.Style = [] ParentFont = False ScrollBars = ssBoth TabOrder = 2 end object PythonEngine1: TPythonEngine IO = PythonGUIInputOutput1 Left = 32 Top = 32 end object OpenDialog1: TOpenDialog DefaultExt = '*.py' Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' Title = 'Open' Left = 240 Top = 32 end object SaveDialog1: TSaveDialog DefaultExt = '*.py' Filter = 'Python files|*.py|Text files|*.txt|All files|*.*' Title = 'Save As' Left = 328 Top = 32 end object PythonGUIInputOutput1: TPythonGUIInputOutput UnicodeIO = True RawOutput = False Output = Memo2 Left = 128 Top = 32 end end |
Demo01Unit.h 파일
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
//--------------------------------------------------------------------------- #ifndef Demo01UnitH #define Demo01UnitH //--------------------------------------------------------------------------- #include <System.Classes.hpp> #include <Vcl.Controls.hpp> #include <Vcl.StdCtrls.hpp> #include <Vcl.Forms.hpp> #include "PythonEngine.hpp" #include <Vcl.Dialogs.hpp> #include <Vcl.ExtCtrls.hpp> #include "PythonGUIInputOutput.hpp" //--------------------------------------------------------------------------- class TForm2 : public TForm { __published: // IDE-managed Components TSplitter *Splitter1; TMemo *Memo1; TPanel *Panel1; TButton *Button1; TButton *Button2; TButton *Button3; TMemo *Memo2; TPythonEngine *PythonEngine1; TOpenDialog *OpenDialog1; TSaveDialog *SaveDialog1; TPythonGUIInputOutput *PythonGUIInputOutput1; void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall Button3Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm2(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm2 *Form2; //--------------------------------------------------------------------------- #endif |
3개의 버튼에 OnClick 이벤트 핸드러를 추가해보겠습니다.
Demo01Unit.cpp 파일
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Demo01Unit.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "PythonEngine" #pragma link "PythonGUIInputOutput" #pragma resource "*.dfm" TForm2 *Form2; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm2::Button1Click(TObject *Sender) { PythonEngine1->ExecStrings( Memo1->Lines ); } //--------------------------------------------------------------------------- void __fastcall TForm2::Button2Click(TObject *Sender) { if (OpenDialog1->Execute()) { Memo1->Lines->LoadFromFile( OpenDialog1->FileName ); } } //--------------------------------------------------------------------------- void __fastcall TForm2::Button3Click(TObject *Sender) { if (SaveDialog1->Execute()) { Memo1->Lines->SaveToFile( SaveDialog1->FileName ); } } //--------------------------------------------------------------------------- |
폴더에 프로젝트를 저장합니다.
C++ VCL Demo 프로그램 실행 & 컴파일과 파이썬 코드 활용하기
폼에는 두 개의 TMemo 컴포넌트가 있습니다. 아래쪽 TMemo에는 파이썬 코드를 입력합니다. 저는 두 숫자의 합, 파이썬 수학 라이브러리에서 파이 값, 파이썬 플랫폼 라이브러리에서 파이썬 버전 값을 출력해보는 예제를 써보았습니다. Load and Save script 버튼을 이용해서 파이썬 스크립트 파일을 대화 상자에 불러오고 저장합니다. Execute script 버튼을 클릭하면 위쪽의 TMemo에 결과값이 나타납니다.
참고 자료들
Python4Delphi와 PyScripter
Python4Delphi on GitHub by Kiriakos Vlahos – https://github.com/pyscripter/python4delphi
[다시보기 PART 1] 델파이 개발자를 위한 파이썬 – https://devgear.co.kr/archives/3664
[다시보기] C++빌더 개발자를 위한 파이썬 – https://blogs.embarcadero.com/using-python4delphi-with-cbuilder-vcl-applications/
PyScripter on GitHub by Kiriakos Vlahos – https://github.com/pyscripter/pyscripter
Python for Windows
Python Releases for Windows (python.org) – https://www.python.org/downloads/windows/
엠바카데로 DocWiki
Creating Packages and DLLs – http://docwiki.embarcadero.com/RADStudio/en/Creating_Packages_and_DLLs
Project | Options | Output – C/C++ – http://docwiki.embarcadero.com/RADStudio/en/Output_-_C/C%2B%2B
Project | Options | Description – http://docwiki.embarcadero.com/RADStudio/en/Descripti
Package Files Created by Compiling – http://docwiki.embarcadero.com/RADStudio/en/Package_Files_Created_by_Compiling
DCC32.EXE, the Delphi Command Line Compiler – http://docwiki.embarcadero.com/RADStudio/en/DCC32.EXE,_the_Delphi_Command_Line_Compiler
DCC64.EXE, the Delphi 64-bit Command Line Compiler – http://docwiki.embarcadero.com/RADStudio/en/DCC64.EXE,_the_Delphi_64-bit_Command_Line_Compiler
Delphi 32-bit compiler (DCC32.exe) cmd line help (C++Builder 커뮤니티 에디션 10.3.3 버전)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
Embarcadero Delphi for Win32 compiler version 33.0 Copyright (c) 1983,2018 Embarcadero Technologies, Inc. Syntax: dcc32 [options] filename [options] -A<unit>=<alias> = Set unit alias -B = Build all units -CC = Console target -CG = GUI target -D<syms> = Define conditionals -E<path> = EXE/DLL output directory -F<offset> = Find error -GD = Detailed map file -GP = Map file with publics -GS = Map file with segments -H = Output hint messages -I<paths> = Include directories -J = Generate .obj file -JPHNE = Generate C++ .obj file, .hpp file, in namespace, export all -JL = Generate package .lib, .bpi, and all .hpp files for C++ -K<addr> = Set image base addr -LE<path> = package .bpl output directory -LN<path> = package .dcp output directory -LU<package> = Use package -M = Make modified units -NU<path> = unit .dcu output directory -NH<path> = unit .hpp output directory -NO<path> = unit .obj output directory -NB<path> = unit .bpi output directory -NX<path> = unit .xml output directory -NS<namespaces> = Namespace search path -O<paths> = Object directories -P = look for 8.3 file names also -Q = Quiet compile -R<paths> = Resource directories -TX<ext> = Output name extension -U<paths> = Unit directories -V = Debug information in EXE -VR = Generate remote debug (RSM) -VT = Debug information in TDS -VN = TDS symbols in namespace -W[+|-|^][warn_id] = Output warning messages -Z = Output 'never build' DCPs -$<dir> = Compiler directive --help = Show this help screen --version = Show name and version --codepage:<cp> = specify source file encoding --default-namespace:<namespace> = set namespace --depends = output unit dependency information --doc = output XML documentation --drc = output resource string .drc file --no-config = do not load default dcc32.cfg file --description:<string> = set executable description --inline:{on|off|auto} = function inlining control --legacy-ifend = allow legacy $IFEND directive --zero-based-strings[+|-] = strings are indexed starting at 0 --peflags:<flags> = set extra PE Header flags field --peoptflags:<flags> = set extra PE Header optional flags field --peosversion:<major>.<minor> = set OS Version fields in PE Header (default: 5.0) --pesubsysversion:<major>.<minor> = set Subsystem Version fields in PE Header (default: 5.0) --peuserversion:<major>.<minor> = set User Version fields in PE Header (default: 0.0) --lib-version:<version> = Output package name version --lib-suffix:<suffix> = Output package name suffix Compiler switches: -$<letter><state> (defaults are shown below) A8 Aligned record fields B- Full boolean Evaluation C+ Evaluate assertions at runtime D+ Debug information G+ Use imported data references H+ Use long strings by default I+ I/O checking J- Writeable structured consts L+ Local debug symbols M- Runtime type info O+ Optimization P+ Open string params Q- Integer overflow checking R- Range checking T- Typed @ operator U- Pentium(tm)-safe divide V+ Strict var-strings W- Generate stack frames X+ Extended syntax Y+ Symbol reference info Z1 Minimum size of enum types Stack size: -$M<minStackSize[,maxStackSize]> (default 16384,1048576) |
Delphi 64-bit compiler (DCC64.exe) cmd line help (C++Builder 커뮤니티 에디션 10.3.3 버전)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
Embarcadero Delphi for Win64 compiler version 33.0 Copyright (c) 1983,2018 Embarcadero Technologies, Inc. Syntax: dcc64 [options] filename [options] -A<unit>=<alias> = Set unit alias -B = Build all units -CC = Console target -CG = GUI target -D<syms> = Define conditionals -E<path> = EXE/DLL output directory -F<offset> = Find error -GD = Detailed map file -GP = Map file with publics -GS = Map file with segments -H = Output hint messages -I<paths> = Include directories -J = Generate .obj file -JPHNE = Generate C++ .obj file, .hpp file, in namespace, export all -JL = Generate package .lib, .bpi, and all .hpp files for C++ -K<addr> = Set image base addr -LE<path> = package .bpl output directory -LN<path> = package .dcp output directory -LU<package> = Use package -M = Make modified units -NU<path> = unit .dcu output directory -NH<path> = unit .hpp output directory -NO<path> = unit .obj output directory -NB<path> = unit .bpi output directory -NX<path> = unit .xml output directory -NS<namespaces> = Namespace search path -O<paths> = Object directories -P = look for 8.3 file names also -Q = Quiet compile -R<paths> = Resource directories -TX<ext> = Output name extension -U<paths> = Unit directories -V = Debug information in EXE -VR = Generate remote debug (RSM) -VT = Debug information in TDS -VN = TDS symbols in namespace -W[+|-|^][warn_id] = Output warning messages -Z = Output 'never build' DCPs -$<dir> = Compiler directive --help = Show this help screen --version = Show name and version --codepage:<cp> = specify source file encoding --default-namespace:<namespace> = set namespace --depends = output unit dependency information --doc = output XML documentation --drc = output resource string .drc file --no-config = do not load default dcc64.cfg file --description:<string> = set executable description --inline:{on|off|auto} = function inlining control --legacy-ifend = allow legacy $IFEND directive --zero-based-strings[+|-] = strings are indexed starting at 0 --peflags:<flags> = set extra PE Header flags field --peoptflags:<flags> = set extra PE Header optional flags field --peosversion:<major>.<minor> = set OS Version fields in PE Header (default: 5.0) --pesubsysversion:<major>.<minor> = set Subsystem Version fields in PE Header (default: 5.0) --peuserversion:<major>.<minor> = set User Version fields in PE Header (default: 0.0) --lib-version:<version> = Output package name version --lib-suffix:<suffix> = Output package name suffix Compiler switches: -$<letter><state> (defaults are shown below) A8 Aligned record fields B- Full boolean Evaluation C+ Evaluate assertions at runtime D+ Debug information G+ Use imported data references H+ Use long strings by default I+ I/O checking J- Writeable structured consts L+ Local debug symbols M- Runtime type info O+ Optimization P+ Open string params Q- Integer overflow checking R- Range checking T- Typed @ operator V+ Strict var-strings W- Generate stack frames X+ Extended syntax Y+ Symbol reference info Z1 Minimum size of enum types Stack size: -$M<minStackSize[,maxStackSize]> (default 16384,1048576) |
C++ Demo project와 Delphi command line package build batch files (zip file)
zip 파일은 여기를 통해 다운로드 받을 수 있습니다: http://davidi.com/code/Python4DelphiDemo01.zip
12.0 12.1 AI AWS C++ c++빌더 chatgpt DelphiCon ios rad서버 RAD스튜디오 UI UIUX UX uxsummit vcl 개발 개발사례 고객사례 기술레터 기술백서 데브옵스 데이터 데이터베이스 델파이 리눅스 마이그레이션 맥 머신러닝 모바일 새버전 샘플 세미나 안드로이드 웹 윈도우 인공지능 인터베이스 출시 커뮤니티에디션 코드 클라우드 파이썬 파이어몽키 현대화