Чет-это переводчик .h-to-.pas
В отличие от некоторых других переводчиков заголовков, Чет использует компилятор Clang для анализа файлов заголовков, что приводит к более точным переводам, которые требуют меньше ручных корректировок.
Некоторые примечательные функции:
#define Declararations на постоянные, где это возможно..pas для всего каталога .h файлов. Это уменьшает проблемы из -за зависимости между файлами заголовков..chet для повторного использования. #ifdef ). Это и хорошо, и плохо. Это хорошо, потому что это повышает точность конверсии. Но это может быть плохо, потому что он использует систему, на которой работает Чет, чтобы определить некоторые условные пути. Например, поскольку Chet работает в Windows, он будет проанализировать код в разделах #ifdef _WIN32 но пропустит любой код в разделах для других платформ. Поскольку Chet использует фактический компилятор, вам нужно будет иметь (минимальную) разработку среды C, а также LLVM с Clang. Кланг должен иметь возможность найти заголовки системы для среды разработки. Обычно они будут доступны, если у вас есть какая -то версия Visual Studio с установленным Visual C ++. Бесплатного (сообщества) издания Visual Studio достаточно.
Сначала вы можете запустить Chet, чтобы проверить любые ошибки, связанные с отсутствующими зависимостями. Если вы получаете какие -либо ошибки зависимости при запуске переводчика, то вы можете скачать зависимости здесь:
Вы можете использовать предварительно скомпилированное 64-битное приложение Windows Chet в каталоге Bin .
Если вы хотите скомпилировать Chet сами, вам также нужен Libclang для Delphi и убедитесь, что Delphi IDE может его найти (проект CHET найдет его автоматически, если каталог Neslib.Clang находится на том же уровне, что и каталог Chet ).
Спасибо за этот вклад:
Чет довольно прост. Во многих случаях вам нужно только предоставить каталог с файлами заголовка, имя выходного файла .pas и выбрать «Запуск заголовка (F9)».
Для получения дополнительной контроля над процессом преобразования вы можете указать различные параметры, описанные ниже.

Любые параметры конфигурации, которые вы устанавливаете, можно сохранить в файле конфигурации .chet (который является простым INI-FILE). Это позволяет вам загрузить настройки позже, чтобы повторить преобразование (например, когда были выпущены новые версии файлов заголовка). Вы можете загрузить и сохранить эти параметры конфигурации, используя меню File .
Чтобы помочь предварительно сконфигурировать некоторые настройки для нового сеанса, выберите File | New Project... (Ctrl+N) . Вы вводите имя проекта, и Chet будет предварительно настроить некоторые настройки на основе введенного вами имени (хотя вы всегда можете изменить эти настройки позже).
Меню Run As Allow As One Option Run Header Translator , который вы также можете активировать с помощью F9 .
Страница проекта содержит наиболее важные параметры конфигурации:
.h здесь. Каталог может быть относительно каталога, содержащего файл проекта .chet . Нажмите кнопку ... чтобы просмотреть каталог. Рекомендуется не использовать каталог с исходным исходным кодом C. Вместо этого скопируйте файлы заголовка в отдельный каталог только для целей конверсии. Это облегчает удаление файлов заголовков, которые вы не хотите преобразовать, или вносить изменения в файлы заголовков для целей конверсии..pas , который будет сгенерирован. Я будет сгенерирован в одном комбинированном файле Pascal для всех файлов заголовков. Имя может быть относительно каталога, содержащего файл проекта .chet . Нажмите кнопку ... , чтобы открыть диалог сохранения.Windows.Winapi ), то вы можете перечислить эти единицы здесь. Будет добавлено в пункт использования сгенерированного файла Pascal.На этой странице вы указываете, на какие платформы вы хотите нацелиться, и как вы хотите их настроить.
LIB_MYLIB , поэтому будет сгенерировано следующее объявление: const LIB_MYLIB = 'mylib.dll' .Далее следуют флажки для всех платформ, на которые вы хотите нацелиться (32-разрядные Windows, 64-битные Windows, 32-битный MacOS, 64-битный Linux, iOS и Android). Для каждой платформы, которую вы проверяете, вы должны ввести следующие параметры:
_ символом).Здесь вы можете настроить процесс анализа кланг.
-D<define> ) и включают пути поиска ( -I<path> ). Есть отдельные кнопки, чтобы облегчить их добавление. Обратитесь к документации Clang для получения информации о доступных аргументах командной строки.Здесь вы настраиваете сгенерированный вывод.
cdecl и stdcall . Почти во всех случаях вы должны использовать соглашение о вызове cdecl по умолчанию. Используйте stdcall только для 32-битных DLL Windows, которые, как вы знаете, составлены с соглашением о вызове 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 ) в качестве идентификаторов в Delphi, но это выглядит странно, и синтаксис -маркер Delphi относится к ним по -разному. Таким образом, вы обычно хотите относиться и к этим как зарезервированным словам.type MyEnum = Integer; ) и создайте константы для каждой опции в подсчете. Это может быть более применимо для некоторых библиотек.#define , см. Замечания ниже). Здесь вы указываете, как справиться с ними:TODO в исходный код Delphi, а также закомментированную версию оригинального объявления. Помните, что вы можете просмотреть список всех Todo в Delphi IDE, выбрав View | Tool Windows | To-Do List .Обратите внимание, что только комментарии документации в стиле доксигена анализируются 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) */ Чет пытается преобразовать объявления #define в константы, если это возможно. Это работает только если:
#define ABS(x) (x < 0) ? -x : x не может быть переведен.#define FOO 3<<BAR будет преобразован в const FOO = 3 shl BAR .Здесь вы можете указать список символов, чтобы игнорировать. Эти символы не будут переведены.
Наиболее распространенное использование - игнорировать #define , которые генерируют ошибки преобразования или функции, которые вам не нужны. Вы также можете игнорировать некоторые типы, но это может привести к ошибкам компиляции позже, потому что ожидаемые типы отсутствуют.
Обратите внимание, что символы чувствительны к случаям.
На последней странице просто есть одна кнопка «Transler Translator» (которую вы также можете активировать с помощью F9 ). Он показывает прогресс процесса перевода, а также любые ошибки, которые произошли при анализе файлов заголовков.
Вы можете использовать эти ошибки для исправления файлов заголовка, добавления файлов отсутствующих заголовков или настройки этого процесса анализа, добавив аргументы командной строки (например, путем добавления путей поиска).
Чет лицензирован по упрощенной лицензии BSD. См. License.txt для деталей.