BleWinrtDll icon indicating copy to clipboard operation
BleWinrtDll copied to clipboard

Is there a reason why this is done in C++ and not C#?

Open nathanrona opened this issue 4 years ago • 1 comments

I.e. would it be possible to make a DLL in C# just as well?

nathanrona avatar May 23 '21 12:05 nathanrona

The time this repo sarted, it was not possible (I tried ;).

The background blog post linked in this project's readme states:

When I first came to look at this a few years ago, I figured that I might be able to “work around it” by trying to “hide” my UWP code inside some .NET assembly and then try to add that assembly to Unity as a plugin but the docs say that managed plugins can’t consume Windows Runtime APIs.

As far as I know, you can’t have a plugin which is;

  • a WinRT component implemented in .NET or in C++.
  • a .NET component that references WinRT APIs or components.

But you can have a native plugin which makes calls out to WinRT APIs so what does it look like to go down that road?

The Unity builtin Player runs on .NET Framework. BLE on the other hand is .NET Core. There is a way to use .NET Core APIs (≈Windows Runtime APIs) from a .NET Framework application (≈desktop apps) but that didn't work for Unity one year ago when I tried it out. The blogpost describes its perspective on why that doesn't work. The way of including the API has changed and maybe Unity has changed some implementation.


One could make a C#-dll that in turns calls the C++-dll. Then you'd import two dlls into the project :-)

adabru avatar May 23 '21 23:05 adabru