adabru / BleWinrtDll

BLE for Unity 3d in Windows without UWP.
Do What The F*ck You Want To Public License
169 stars 53 forks source link

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

Open nathanrona opened 3 years ago

nathanrona commented 3 years ago

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

adabru commented 3 years ago

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 :-)