HexaGen.Language 1.1.5

Prefix Reserved
dotnet add package HexaGen.Language --version 1.1.5
                    
NuGet\Install-Package HexaGen.Language -Version 1.1.5
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="HexaGen.Language" Version="1.1.5" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="HexaGen.Language" Version="1.1.5" />
                    
Directory.Packages.props
<PackageReference Include="HexaGen.Language" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add HexaGen.Language --version 1.1.5
                    
#r "nuget: HexaGen.Language, 1.1.5"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package HexaGen.Language@1.1.5
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=HexaGen.Language&version=1.1.5
                    
Install as a Cake Addin
#tool nuget:?package=HexaGen.Language&version=1.1.5
                    
Install as a Cake Tool

HexaGen

HexaGen is a comprehensive code generation toolkit for C# and C++ projects. It uses HexaGen.CppAst to parse C/C++ headers and automatically generates C# bindings and wrappers. HexaGen simplifies the process of integrating native libraries with C# applications by automating the creation of interop code.

✨ Features

  • C# Bindings for C Libraries: Automatically generate C# bindings from C headers with support for functions, structs, enums, and callbacks
  • C# Bindings for COM Libraries: Create C# bindings for COM interfaces and objects
  • C++ to C Wrappers: Generate C wrappers around C++ libraries to facilitate C interop
  • Flexible Configuration: JSON-based configuration system with inheritance and composition support
  • Advanced Function Generation: Multiple parameter handling strategies including spans, refs, delegates, and default values
  • Type Mapping: Configurable type mappings and conversions
  • Extension Methods: Generate extension methods for improved API ergonomics
  • Constants to Enums: Convert C preprocessor constants to strongly-typed C# enums

📁 Project Structure

  • HexaGen - Main code generation tool and CLI
  • HexaGen.Core - Core functionality and utilities for code generation
  • HexaGen.Cpp2C - C++ to C wrapper generator
  • HexaGen.Runtime - Runtime support library for generated code (multi-target: .NET 9/8/7/6, .NET Standard 2.0/2.1, .NET Framework 4.7.2, Android)
  • HexaGen.Runtime.COM - Runtime support for COM interop (multi-target: .NET 9/8/7/6, .NET Standard 2.0/2.1, .NET Framework 4.7.2)
  • HexaGen.Language - Language parsing and processing utilities
  • HexaGen.Tests - Unit tests
  • HexaGen.PerformanceTests - Performance benchmarks

🔧 Requirements

  • .NET SDK 9.0 (or compatible version)
  • Clang 17.0.4 or later (for parsing C/C++ headers)
  • Visual Studio 2022 or later (recommended for development)
  • The ability to read

📦 Installation

NuGet Package

Install HexaGen via NuGet Package Manager:

dotnet add package HexaGen

Build from Source

  1. Clone the Repository:

    git clone https://github.com/HexaEngine/HexaGen.git
    cd HexaGen
    
  2. Build the Project:

    dotnet build
    

🚀 Usage

Basic Example

Create a configuration file (e.g., config.json):

{
  "ApiName": "MyLibrary",
  "Namespace": "MyLibrary.Generated",
  "ImportType": "DllImport",
  "GenerateExtensions": true
}

Generate C# bindings programmatically:

using HexaGen;

var config = CsCodeGeneratorConfig.Load("config.json");
var generator = new CsCodeGenerator(config);
generator.Generate("mylibrary.h", "Output");

⚙️ Configuration

HexaGen uses a JSON-based configuration system that supports:

  • BaseConfig: Configuration inheritance from other files
  • Type Mappings: Custom type conversions
  • Function Rules: Advanced parameter transformation rules
  • Constants to Enum: Convert preprocessor defines to enums
  • Import Types: DllImport, LibraryImport, or delegates

Example configuration with inheritance:

{
  "BaseConfig": {
    "Url": "file://config.base.json",
    "IgnoredProperties": ["IgnoredTypes"]
  },
  "ApiName": "MyAPI",
  "Namespace": "MyAPI.Generated",
  "ImportType": "LibraryImport"
}

C++ to C Generation

For generating C wrappers around C++ libraries:

using HexaGen.Cpp2C;

var config = Cpp2CGeneratorConfig.Load("cpp2c-config.json");
var generator = new Cpp2CGenerator(config);
generator.Generate("mylibrary.hpp", "Output");

🤝 Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes following the project's coding standards
  4. Add appropriate tests
  5. Submit a pull request

📜 License

HexaGen is licensed under the MIT License. See the LICENSE.txt file for details.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on HexaGen.Language:

Package Downloads
HexaGen

HexaGen is a code generation toolkit for C++ and C# projects.

HexaGen.Legacy

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.5 31 8/3/2026
1.1.4 387 11/1/2025
1.1.3 231 10/21/2025
1.1.3-unstable 218 9/6/2024
1.1.2 1,342 8/18/2024
1.1.1 251 8/16/2024
1.1.0 266 8/16/2024 1.1.0 is deprecated because it has critical bugs.
1.0.1 220 8/14/2024
1.0.0 254 8/5/2024