Tools and libraries to glue C/C++ APIs to high-level languages
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Ali Alamiri fe33488829
Option to allow caller to specify it does not want unchanged output files to be modified. This supports incremental build in VS. (#1373)
6 years ago
.github Created a template for new issues. 10 years ago
build force bash use to avoid `./premake5-linux: 3: ./premake5-linux: Bad substitution` error if other default shell in the system 6 years ago
deps Added complete support for VS 2017 9 years ago
docs Document the release of CppSharp 0.10.3 6 years ago
examples Simplified the getting of the target info in the parser. 9 years ago
include add cli namespace to header to ensure the array type does not conflict with other types called array 6 years ago
src Option to allow caller to specify it does not want unchanged output files to be modified. This supports incremental build in VS. (#1373) 6 years ago
tests Correctly marshal constant arrays in C++/CLI (#1346) 6 years ago
.gitattributes Add .gitattributes 12 years ago
.gitignore Git ignore new include folders for cross generation. 6 years ago
.gitmodules Initial integration of Clang AST viewer GUI tool. 7 years ago
.travis.yml Upgrade to Ubuntu 20.04 Focal Fossa for CI 6 years ago
CODE-OF-CONDUCT.md Link Code of Conduct (#1335) 6 years ago
CONTRIBUTING.md Fixed a typing and a grammatical error in the guide to contributing. 9 years ago
LICENSE Clarified that the license of CppSharp is MIT. 10 years ago
README.md Update README.md 6 years ago
appveyor.yml publish the clang lib folder 6 years ago

README.md

CppSharp is a tool and set of libraries which facilitates the usage of native C/C++ code with the .NET ecosystem.

It consumes C/C++ header and library files and generates the necessary glue code to surface the native API as a managed API. Such an API can be used to consume an existing native library in your managed code or add managed scripting support to a native codebase.

The supported target languages at present are C# and C++/CLI.

It can also be used as a library to parse native code into a syntax tree with a rich declaration and type information model.

Releases/Build Status

Windows 64-bit Windows 32-bit windows-vs-x86 linux-gcc-x86_64 osx-clang-x86
NuGet GitHub release windows-vs-x86 linux-gcc-x86_64 osx-clang-x86
  1. Libraries
  2. Documentation
  3. Community
  4. Support
  5. Users

Libraries

AST

Mirrors the Clang's C/C++ AST and type system classes in C# APIs.

Check out Clang's AST introduction docs for more details about its architecture.

  • C++ declarations
  • C++ statements / expressions
  • C++ types
  • Class object layout
  • Declaration visitors
  • Type visitors

Parser

Provides APIs for parsing of C/C++ source code into a syntax tree.

  • Parsing of C/C++ source code
  • Parsing of libraries archives symbols
  • Parsing of shared libraries symbols
  • Based on the very accurate Clang C++ parser.

Generator

Generates the glue binding code from a syntax tree of the native code.

  • Multiple backends: C++/CLI and C# (P/Invoke)
  • Multiple ABIs: Itanium, MS, ARM, iOS
  • Multiple platforms: Windows, OS X and Linux
  • Multiple runtimes: .NET and Mono
  • C++ virtual methods overriding from managed code
  • C++ multiple inheritance by translating to C# interfaces
  • C++ std::string
  • C++ default parameter values
  • C/C++ semantic comments (Doxygen) to C# comments
  • Extensible bindings semantics via user passes and type mapping

Documentation

Please see the following resources for more information:

Getting Started

User's Manual

Developer's Manual

Community

Feel free to open up issues on Github for any problems you find.

You can also join us at our #managed-interop Gitter discussion channel.

Support

For building wrappers and priority support please write to cppsharp@protonmail.com. Alternatively, you may post bounties at https://www.bountysource.com/.

Users

CppSharp is used by the following projects:

QtSharp

MonoGame

LLDBSharp

Xamarin

FFMPEG.net

FFmpeg bindings

Tizen bindings

libgd bindings

ChakraSharp

FFmpeg.AutoGen

GLFW3.NET

Please feel free to send us a pull request adding your own projects to the list above.