Tools and libraries to glue C/C++ APIs to high-level languages
Перейти к файлу
Joao Matos cb852acfdc Add CppSharp VS Code workspace. 2021-02-21 02:50:43 +00:00
.github Create a single nuget package that supports windows / linux / macos 2020-12-14 01:46:12 +00:00
build Add missing quotes to support paths with spaces in build scripts 2021-01-18 13:08:20 +00:00
docs Add a log for changes per release 2021-01-28 16:17:05 +00:00
examples Remove QuickJS example, we have proper tests now. 2020-12-15 02:51:42 +00:00
include Continue implementation of C++ generator. 2020-11-18 01:26:58 +00:00
src Rework core implementation of QuickJS generator. 2021-02-21 00:02:04 +00:00
tests Test C++11 in-class member initializers 2021-02-12 22:49:12 +02:00
tests2 Update JS tests. 2021-02-21 00:02:04 +00:00
.gitattributes Add .gitattributes 2014-05-12 10:09:41 +03:00
.gitignore Ignore external projects. 2021-02-21 02:50:43 +00:00
.gitmodules Initial integration of Clang AST viewer GUI tool. 2019-01-25 10:23:31 +00:00
CHANGELOG.md Document release 0.11.1 2021-02-04 00:28:39 +02:00
CONTRIBUTING.md Fixed a typing and a grammatical error in the guide to contributing. 2017-03-06 02:15:11 +02:00
CppSharp.code-workspace Add CppSharp VS Code workspace. 2021-02-21 02:50:43 +00:00
Directory.Build.props Remove win x86 from the NuGet for smaller size (#1550) 2020-12-15 20:02:12 +02:00
Directory.Packages.props Remove looking MSVC headers up with COM 2021-02-03 21:47:17 +00:00
LICENSE Clarified that the license of CppSharp is MIT. 2016-06-12 19:44:18 +03:00
README.md Update badges in README with GitHub Actions CI. 2020-11-07 21:35:42 +00:00

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

NuGet Packages GitHub Releases Continuous Integration
NuGet GitHub release GitHub-actions
  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.