O Chet é um tradutor .h-to-.pas alimentado por Libclang para Delphi.
Ao contrário de outros tradutores de cabeçalho, o Chet usa o compilador CLANG para analisar arquivos de cabeçalho, resultando em traduções mais precisas que requerem menos ajustes manuais.
Alguns recursos notáveis são:
#define para constantes sempre que possível..pas para um diretório inteiro de arquivos .h . Isso reduz os problemas devido a dependências entre os arquivos do cabeçalho..chet para reutilização. #ifdef ). Isso é bom e ruim. É bom porque melhora a precisão da conversão. Mas pode ser ruim porque usa o sistema em que o Chet segue para determinar alguns caminhos condicionais. Por exemplo, como o Chet é executado no Windows, ele analisará o código nas seções #ifdef _WIN32 mas pule qualquer código nas seções para outras plataformas. Como o Chet usa um compilador real, você precisará ter um (mínimo) C desenvolver um ambiente instalado, bem como o LLVM com o CLANG. Clang precisa ser capaz de encontrar os cabeçalhos do sistema para o ambiente de desenvolvimento. Geralmente, eles estarão disponíveis se você tiver alguma versão do Visual Studio com o Visual C ++ instalado. A edição gratuita (comunitária) do Visual Studio é suficiente.
Você pode executar o Chet primeiro para verificar se há erros relacionados à falta de dependências. Se você receber algum erro de dependência ao executar o tradutor, poderá fazer o download das dependências aqui:
Você pode usar o aplicativo Windows CHET de 64 bits pré-compilado no diretório Bin .
Se você deseja compilar o Chet, também precisará da Libclang para Delphi e verifique se o Delphi IDE pode encontrá -lo (o projeto Chet o encontrará automaticamente se o diretório Neslib.Clang estiver no mesmo nível do diretório Chet ).
Obrigado por essas contribuições:
Chet é bem direto. Em muitos casos, você só precisa fornecer um diretório com arquivos de cabeçalho, o nome do arquivo .pas de saída e selecionar "Executar o Tradutor de cabeçalho (F9)".
Para obter mais controle sobre o processo de conversão, você pode especificar várias opções, descritas abaixo.

Quaisquer opções de configuração definidas podem ser salvas em um arquivo de configuração .chet (que é um arquivo ini simples). Isso permite que você carregue as configurações posteriormente para executar novamente a conversão (por exemplo, quando novas versões dos arquivos de cabeçalho foram lançadas). Você pode carregar e salvar essas opções de configuração usando o menu File .
Para ajudar a pré-configurar algumas configurações para uma nova sessão, selecione File | New Project... (Ctrl+N) . Você insere o nome do projeto e o CHET pré-configurará algumas configurações com base no nome que você entra (embora você sempre possa modificar essas configurações posteriormente).
O menu Run assim como a única opção Run Header Translator , que você também pode ativar com F9 .
A página do projeto contém as opções de configuração mais importantes:
.h aqui. O diretório pode ser relativo ao diretório que contém o arquivo do projeto .chet . Clique no botão ... para navegar para obter um diretório. É recomendável que você não use o diretório com o código -fonte C original. Em vez disso, copie os arquivos do cabeçalho para um diretório separado apenas para fins de conversão. Isso facilita a exclusão de arquivos de cabeçalho que você não deseja converter ou para fazer edições em arquivos de cabeçalho para fins de conversão..pas que será gerado. I Single Combined Pascal File será gerado para todos os arquivos de cabeçalho analisado. O nome pode ser relativo ao diretório que contém o arquivo do projeto .chet . Clique no botão ... para abrir uma caixa de diálogo Salvar.Windows.Winapi ), você poderá listar essas unidades aqui. O será adicionado à cláusula de uso do arquivo Pascal gerado.Nesta página, você especifica quais plataformas deseja segmentar e como deseja configurá -las.
LIB_MYLIB , para que a seguinte declaração será gerada: const LIB_MYLIB = 'mylib.dll' .Em seguida, são caixas de seleção para todas as plataformas que você deseja direcionar (Windows de 32 bits, Windows de 64 bits, macOS de 32 bits, Linux de 64 bits, iOS e Android). Para cada plataforma que você verifica, você deve inserir as seguintes opções:
_ ).Aqui você pode personalizar o processo de análise Clang.
-D<define> ) e incluir caminhos de pesquisa ( -I<path> ). Existem botões separados para facilitar adicioná -los. Consulte a documentação do CLANG para obter informações sobre os argumentos de linha de comando disponíveis.É aqui que você personaliza a saída gerada.
cdecl e stdcall . Em quase todos os casos, você deve usar a convenção de chamada cdecl padrão. Use stdcall apenas para DLLs de Windows de 32 bits, que você sabe que são compilados com a Convenção de Calling STDCALL. Geralmente são apenas as DLLs do sistema Windows. A maioria das DLLs de terceiros usam CDECL.char é ambíguo, pode ser usado como um número inteiro de 8 bits ou um caractere em uma string de texto. As versões digitadas signed char e unsigned char são sempre convertidos em Shortint e Byte , respectivamente. Mas quando nenhum assinado é especificado, você tem as seguintes opções:char em um UTF8Char cruzado.char em um Shortint assinado de 8 bits.char em um Byte não assinado de 8 bits.begin e procedure ). Aqui você especifica como deseja converter esses identificadores:public ) como identificadores em Delphi, mas parece estranho e a sintaxe do Delphi os trata de maneira diferente. Portanto, você geralmente deseja tratá -las como palavras reservadas também.type MyEnum = Integer; ) e crie constantes para cada opção na enumeração. Isso pode ser mais aplicável a algumas bibliotecas.#define , veja as observações abaixo). Aqui você especifica como lidar com isso:TODO padrão): grava um comentário para o código-fonte Delphi, bem como uma versão comentada da declaração original. Lembre -se de que você pode visualizar uma lista de todos os TODOs no Delphi IDE selecionando View | Tool Windows | To-Do List .Observe que apenas os comentários da documentação no estilo doxygen são analisados por Clang. Estes são comentários que seguem qualquer uma dessas convenções 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 tenta converter #define declarações em constantes, se possível. Isso só funciona se:
#define ABS(x) (x < 0) ? -x : x não pode ser traduzido.#define FOO 3<<BAR será convertido em const FOO = 3 shl BAR .Aqui você pode especificar uma lista de símbolos para ignorar. Esses símbolos não serão traduzidos.
O uso mais comum é ignorar o #define que gera erros de conversão ou funções que você não precisa. Você também pode optar por ignorar alguns tipos, mas isso pode resultar em erros de compilação posteriormente porque os tipos esperados estão faltando.
Observe que os símbolos são sensíveis ao minúsculas.
A página final possui um único botão "Executar o tradutor do cabeçalho" (que você também pode ativar com F9 ). Ele mostra o progresso do processo de tradução, bem como quaisquer erros que ocorreram ao analisar os arquivos do cabeçalho.
Você pode usar esses erros para corrigir os arquivos do cabeçalho, adicionar arquivos de cabeçalho ausentes ou configurar esse processo de análise, adicionando argumentos da linha de comando (por exemplo, adicionando caminhos de pesquisa incluem).
O Chet é licenciado sob a licença BSD simplificada. Consulte License.txt para obter detalhes.