dotnext DotNext 2019 SPb (15.05.2019)

Cross-platform object-oriented interaction between C# and C++

img

We’ll see a solution which enables transparent two-way connection between C++ and C# on the level of interfaces which both C# and C++ classes can implement.

P/Invoke is very easy to use, but, sadly, works only with libraries providing C-style functions. As for object-oriented interaction with native code, it is usually implemented by means of C++/CLI which isn’t compatible with .NET Core (yet) and non-Windows platforms (at all).

As .NET moves to other platforms, we encounter a problem of interaction with non-manageable part of application, which needs to be solved somehow.

In this talk, we’ll see a solution which:

  • enables transparent two-way connection between C++ and C# on the level of interfaces which both C# and C++ classes can implement;

  • allows you to control memory usage through reference counting;

  • doesn’t reinvent the wheel, but rather uses technologies and principles, tried and tested by the time and hundreds of applications, in a not-so-standard manner;

  • is successfully being used now in the Avalonia project for the C#<→C++<→Objective-C interactions without being bound to intricately-patched runtimes like Xamarin.Mac.