Chet es un traductor .h-to-.pas alimentado por libclang para Delphi.
A diferencia de otros traductores de encabezado, Chet usa el compilador Clang para analizar archivos de encabezado, lo que resulta en traducciones más precisas que requieren menos ajustes manuales.
Algunas características notables son:
#define declaraciones a constantes cuando sea posible..pas para un directorio completo de archivos .h . Esto reduce los problemas debido a las dependencias entre los archivos de encabezado..chet para reutilizar. #ifdef ). Esto es bueno y malo. Es bueno porque mejora la precisión de la conversión. Pero puede ser malo porque utiliza el sistema en el que CHET se ejecuta para determinar algunas rutas condicionales. Por ejemplo, debido a que Chet se ejecuta en Windows, analizará el código en las secciones #ifdef _WIN32 pero omita cualquier código en las secciones para otras plataformas. Dado que CHET utiliza un compilador real, deberá tener un entorno de desarrollo C (mínimo) instalado, así como LLVM con Clang. Clang necesita poder encontrar los encabezados del sistema para el entorno de desarrollo. Por lo general, estarán disponibles si tiene alguna versión de Visual Studio con Visual C ++ instalada. La edición gratuita (comunidad) de Visual Studio es suficiente.
Primero puede ejecutar CHET para verificar cualquier error relacionado con las dependencias faltantes. Si recibe algún error de dependencia al ejecutar el traductor, puede descargar las dependencias aquí:
Puede usar la aplicación Windows Chet de 64 bits precompilada en el directorio Bin .
Si desea compilar chet, también necesita libclang para Delphi y asegúrese de que el IDE Delphi pueda encontrarlo (el proyecto CHET lo encontrará automáticamente si el directorio Neslib.Clang está al mismo nivel que el directorio Chet ).
Gracias por estas contribuciones:
Chet es bastante sencillo. En muchos casos, solo necesita proporcionar un directorio con archivos de encabezado, el nombre del archivo .pas de salida y seleccionar "Ejecutar el traductor de encabezado (F9)".
Para obtener más control sobre el proceso de conversión, puede especificar varias opciones, descritas a continuación.

Cualquier opción de configuración que establezca se puede guardar en un archivo de configuración .chet (que es un simple archivo). Esto le permite cargar la configuración más tarde para volver a ejecutar la conversión (por ejemplo, cuando se han lanzado nuevas versiones de los archivos de encabezado). Puede cargar y guardar estas opciones de configuración utilizando el menú File .
Para ayudar a preconfigurar algunas configuraciones para una nueva sesión, seleccione File | New Project... (Ctrl+N) . Ingrese el nombre del proyecto y CHET preconfigurará algunas configuraciones en función del nombre que ingrese (aunque siempre puede modificar esa configuración más adelante).
El menú Run al igual que la opción única Run Header Translator , que también puede activar con F9 .
La página del proyecto contiene las opciones de configuración más importantes:
.h de origen aquí. El directorio puede ser relativo al directorio que contiene el archivo del proyecto .chet . Haga clic en el botón ... para buscar un directorio. Se recomienda que no use el directorio con el código fuente C original. En su lugar, copie los archivos de encabezado en un directorio separado solo para fines de conversión. Esto hace que sea más fácil eliminar archivos de encabezado que no desea convertir, o hacer ediciones a archivos de encabezado para fines de conversión..pas que se generará. Se generará un archivo Pascal combinado único para todos los archivos de encabezado analizados. El nombre puede ser relativo al directorio que contiene el archivo del proyecto .chet . Haga clic en el botón ... para abrir un cuadro de diálogo Guardar.Windows.Winapi ), entonces puede enumerar esas unidades aquí. Se agregará a la cláusula de usos del archivo PASCAL generado.En esta página, especifica qué plataformas desea orientar y cómo desea configurarlas.
LIB_MYLIB , por lo que se generará la siguiente declaración: const LIB_MYLIB = 'mylib.dll' .Las siguientes son las casillas de verificación para todas las plataformas a las que desea apuntar (Windows de 32 bits, Windows de 64 bits, macOS de 32 bits, Linux de 64 bits, iOS y Android). Para cada plataforma que verifica, debe ingresar las siguientes opciones:
_ ).Aquí puede personalizar el proceso de análisis de Clang.
-D<define> ) e incluyen rutas de búsqueda ( -I<path> ). Hay botones separados para que sea más fácil agregarlos. Consulte la documentación de Clang para obtener información sobre los argumentos de línea de comandos disponibles.Aquí es donde personaliza la salida generada.
cdecl y stdcall . En casi todos los casos, debe usar la convención predeterminada de llamadas cdecl . Use stdcall solo para los DLL de Windows de 32 bits que sabe que se compilan con la convención de llamadas STDCall. Esos son solo solo DLL del sistema de Windows. La mayoría de los terceros dll usan CDECL.char es ambiguo, se puede usar como un entero de 8 bits o un carácter en una cadena de texto. Las versiones mecanografiadas signed char y unsigned char siempre se convierten en Shortint y Byte respectivamente. Pero cuando no se especifica la firma, tiene las siguientes opciones:char a un UTF8Char de plataforma cruzada.char a un Shortint firmado de 8 bits.char a un Byte sin firmar de 8 bits.begin y procedure ). Aquí especifica cómo desea convertir estos identificadores:public ) como identificadores en Delphi, pero se ve extraño y el marcador de sintaxis de Delphi los trata de manera diferente. Por lo tanto, generalmente también desea tratarlos como palabras reservadas.type MyEnum = Integer; ) y cree constantes para cada opción en la enumeración. Esto puede ser más aplicable para algunas bibliotecas.#define ", vea los comentarios a continuación). Aquí especifica cómo manejar estos:TODO al código fuente de Delphi, así como una versión comentada de la declaración original. Recuerde que puede ver una lista de todos los TODO en Delphi IDE seleccionando View | Tool Windows | To-Do List .Tenga en cuenta que solo los comentarios de documentación de estilo Doxygen están analizados por Clang. Estos son comentarios que siguen cualquiera de estas convenciones de formato:
/// 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 intenta convertir las declaraciones #define a constantes si es posible. Esto solo funciona si:
#define ABS(x) (x < 0) ? -x : x no se puede traducir.#define FOO 3<<BAR se convertirá a const FOO = 3 shl BAR .Aquí puede especificar una lista de símbolos para ignorar. Estos símbolos no serán traducidos.
El uso más común es ignorar los #define que generan errores de conversión o funciones que no necesita. También puede optar por ignorar algunos tipos, pero eso puede dar lugar a errores de compilación más adelante porque faltan los tipos esperados.
Tenga en cuenta que los símbolos son sensibles a los casos.
La página final solo tiene un solo botón "Ejecutar el traductor de encabezado" (que también puede activar con F9 ). Muestra el progreso del proceso de traducción, así como cualquier error que ocurriera mientras analizaba los archivos de encabezado.
Puede usar estos errores para corregir los archivos de encabezado, agregar archivos de encabezado faltantes o configurar ese proceso de análisis agregando argumentos de línea de comandos (por ejemplo, agregando rutas de búsqueda de incluido).
Chet tiene licencia bajo la licencia BSD simplificada. Consulte License.txt para más detalles.