Chet은 Libclang의 Delphi를 위해 구동되는 .h-to-.pas 번역기입니다.
다른 헤더 번역기와 달리 Chet은 Clang 컴파일러를 사용하여 헤더 파일을 구문 분석하여 수동 조정이 적은 정확한 번역을 만듭니다.
주목할만한 기능은 다음과 같습니다.
#define 선언을 가능한 경우 상수로 번역하려고합니다..h 파일의 전체 디렉토리에 대해 단일 .pas 파일을 생성합니다. 이렇게하면 헤더 파일 간의 종속성으로 인해 문제가 줄어 듭니다..chet 프로젝트 파일에 저장할 수 있습니다. #ifdef 지침에 따라)을 수행하기 위해 실행됩니다. 이것은 좋고 나쁘다. 변환 정확도를 향상시키기 때문에 좋습니다. 그러나 Chet이 실행하는 시스템을 사용하여 일부 조건부 경로를 결정하기 때문에 나빠질 수 있습니다. 예를 들어, Chet은 Windows에서 실행되므로 #ifdef _WIN32 섹션에서 코드를 구문 분석하지만 다른 플랫폼의 섹션에서 코드를 건너 뜁니다. Chet은 실제 컴파일러를 사용하므로 Clang과 함께 LLVM뿐만 아니라 (최소) C 개발 환경을 설치해야합니다. Clang은 개발 환경을위한 시스템 헤더를 찾을 수 있어야합니다. 일반적으로 Visual C ++가 설치된 Visual Studio 버전이있는 경우 일반적으로 사용할 수 있습니다. Visual Studio의 무료 (커뮤니티) 에디션으로 충분합니다.
먼저 Chet을 실행하여 누락 된 종속성과 관련된 오류를 확인할 수 있습니다. 번역기를 실행할 때 종속성 오류가 발생하면 여기에서 종속성을 다운로드 할 수 있습니다.
Bin 디렉토리에서 사전 컴파일 된 64 비트 Windows Chet 응용 프로그램을 사용할 수 있습니다.
Chet을 직접 컴파일하려면 Delphi 용 Libclang이 필요하고 Delphi ide가 찾을 수 있는지 확인하십시오 ( Neslib.Clang 디렉토리가 Chet 디렉토리와 동일한 수준이면 Chet 프로젝트에서 자동으로 찾을 수 있습니다).
이러한 기여에 감사드립니다.
Chet은 매우 간단합니다. 대부분의 경우 출력 .pas 파일의 이름 인 헤더 파일이있는 디렉토리 만 제공하고 "헤더 번역기 (F9) 실행"을 선택하면됩니다.
전환 프로세스를보다 제어하려면 아래에 설명 된 다양한 옵션을 지정할 수 있습니다.

설정 한 구성 옵션은 .chet 구성 파일 (간단한 INI-File)에 저장할 수 있습니다. 이를 통해 나중에 설정을로드하여 변환을 다시 실행할 수 있습니다 (예 : 새 버전의 헤더 파일이 릴리스 된 경우). File 메뉴를 사용하여 이러한 구성 옵션을로드하고 저장할 수 있습니다.
새 세션의 일부 설정을 사전 구성하려면 File | New Project... (Ctrl+N) . 프로젝트 이름을 입력하고 Chet은 입력 한 이름에 따라 일부 설정을 사전 구성합니다 (나중에 해당 설정을 항상 수정할 수 있지만).
단일 옵션 Run Run Header Translator 와 마찬가지로 F9 로 활성화 할 수 있습니다.
프로젝트 페이지에는 가장 중요한 구성 옵션이 포함되어 있습니다.
.h 파일이있는 디렉토리를 지정하십시오. 디렉토리는 .chet 프로젝트 파일이 포함 된 디렉토리와 관련이있을 수 있습니다. 디렉토리를 찾으려면 ... 버튼을 클릭하십시오. 원래 C 소스 코드와 함께 디렉토리를 사용하지 않는 것이 좋습니다. 대신, 전환 목적으로 헤더 파일을 별도의 디렉토리로 복사하십시오. 이를 통해 변환하지 않으려는 헤더 파일을 더 쉽게 삭제하거나 변환 목적으로 헤더 파일로 편집 할 수 있습니다..pas 파일의 이름을 지정하십시오. I 단일 결합 된 파스칼 파일은 모든 구문 분석 된 헤더 파일에 대해 생성됩니다. 이름은 .chet 프로젝트 파일이 포함 된 디렉토리와 관련이있을 수 있습니다. ... 버튼을 클릭하여 저장 대화 상자를 엽니 다.Windows.Winapi )의 선언에 의존하는 경우 해당 유닛을 여기에 나열 할 수 있습니다. 생성 된 파스칼 파일의 사용 절에 추가됩니다.이 페이지에서는 타겟팅 할 플랫폼과 구성 방법을 지정합니다.
LIB_MYLIB 일 수 있으므로 다음 선언이 생성됩니다. const LIB_MYLIB = 'mylib.dll' .다음은 타겟팅하려는 모든 플랫폼 (32 비트 Windows, 64 비트 Wind 확인하는 각 플랫폼에 대해 다음 옵션을 입력해야합니다.
_ 문자 포함).여기에서 Clang Parsing 프로세스를 사용자 정의 할 수 있습니다.
-D<define> )를 추가하고 검색 경로 ( -I<path> )를 포함하는 것입니다. 더 쉽게 추가 할 수있는 별도의 버튼이 있습니다. 사용 가능한 명령 줄 인수에 대한 정보는 Clang 문서를 참조하십시오.생성 된 출력을 사용자 정의하는 곳입니다.
cdecl 과 stdcall 중에서 선택할 수 있습니다. 거의 모든 경우에 기본 cdecl 통화 규칙을 사용해야합니다. STDCALL 통화 컨벤션과 함께 편집 된 32 비트 Windows DLL에만 stdcall 사용하십시오. 그것들은 일반적으로 Windows System DLL입니다. 대부분의 타사 DLL은 CDECL을 사용합니다.char 유형은 모호하며 텍스트 문자열의 8 비트 정수 또는 문자로 사용할 수 있습니다. 타이핑 된 버전이 signed char 및 unsigned char 항상 Shortint 및 Byte 로 변환됩니다. 그러나 서명이 지정되지 않은 경우 다음 옵션이 있습니다.char 크로스 플랫폼 UTF8Char 로 변환합니다.char 8 비트 서명 한 Shortint 으로 변환하십시오.char 8 비트 부호없는 Byte 로 변환하십시오.begin 및 procedure )의 예약 된 단어와 충돌하는 식별자를 사용할 수 있습니다. 여기에서는 이러한 식별자를 변환하는 방법을 지정합니다.public )을 사용할 수 있지만 이상하게 보이며 델파이의 구문 형광펜은 다르게 취급합니다. 그래서 당신은 보통 이것을 예약 된 단어로 취급하고 싶습니다.type MyEnum = Integer; )에서 정수로 변환하고 열거에서 각 옵션에 대한 상수를 만듭니다. 이것은 일부 라이브러리에 더 적용 할 수 있습니다.#define 's, 아래의 비고 참조). 여기에서는 다음을 처리하는 방법을 지정합니다.TODO 주석을 씁니다. View | Tool Windows | To-Do List .Doxygen Style Documentation 댓글 만 Clang이 구문 분석합니다. 이들은 이러한 형식 규칙을 따르는 의견입니다.
/// Comment (with 3 slashes)/** Comment (with two stars) *//*! Comment (with exclamation point) *////< Comment (applies to preceding declaration)/**< Comment (applies to preceding declaration) *//*!< Comment (applies to preceding declaration) */ Chet은 가능한 경우 #define 선언을 상수로 변환하려고합니다. 이것은 다음과 같은 경우에만 작동합니다.
#define ABS(x) (x < 0) ? -x : x 번역 할 수 없습니다.#define FOO 3<<BAR const FOO = 3 shl BAR 로 변환됩니다.여기에서 무시할 기호 목록을 지정할 수 있습니다. 이 기호는 번역되지 않습니다.
가장 일반적인 사용은 변환 오류 또는 필요하지 않은 기능을 생성하는 #define 's를 무시하는 것입니다. 일부 유형을 무시하도록 선택할 수도 있지만 예상 유형이 누락되었으므로 나중에 컴파일 오류가 발생할 수 있습니다.
기호는 대소 문자에 민감합니다.
마지막 페이지에는 단일 버튼 "run header translator"가 있습니다 ( F9 로 활성화 할 수도 있음). 번역 프로세스의 진행 상황과 헤더 파일을 구문 분석하는 동안 발생한 오류를 보여줍니다.
이러한 오류를 사용하여 헤더 파일을 수정하거나, 누락 된 헤더 파일을 추가하거나, 명령 줄 인수를 추가하여 (예 : 검색 경로 포함 포함) 구문 분석 프로세스를 구성 할 수 있습니다.
Chet은 단순화 된 BSD 라이센스에 따라 라이센스가 부여됩니다. 자세한 내용은 License.txt를 참조하십시오.