Entwickler-Ecke

Sonstiges (.NET) - C # .Net Methoden von C heraus aufrufen


doubleII - Sa 04.05.19 20:13
Titel: C # .Net Methoden von C heraus aufrufen
Hallo,

ich versuche C# Methoden von C Projekt heraus aufzurufen, leider finde ich kaum Info darüber.
Hat sich schon jemand mit dem Thema beschäftigt?

Ich habe das Nuget Paket gefunden. Dies gibt die Möglichkeit, C# Methoden in native Anwendungen zu exportieren. Mein Problem ist, dass ich nicht weiß, wie ich die Methoden in C aufrufen kann. Ich habe ins Internet nichts gefunden, was mir weiter helfen könnte.
https://www.nuget.org/packages/UnmanagedExports

Hier anbei ein Beispiel.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public class Library
{
    [DllExport("add", System.Runtime.InteropServices.CallingConvention.Cdecl)]
    public static int Add(int a , int b)
    => a + b;

    [DllExport("mul", System.Runtime.InteropServices.CallingConvention.Cdecl)]
    public static int Multiplication(int a, int b)
    => a * b;
}


Vielen Dank!

:)


Th69 - So 05.05.19 09:02

Das ist direkt nicht möglich, da C# eben auf der CLR [https://de.wikipedia.org/wiki/Common_Language_Runtime] aufsetzt (und diese bei einem C oder C++ Programm nicht eingebunden ist).
Du könntest aber ein C++/CLI [https://de.wikipedia.org/wiki/C%2B%2B/CLI]-Projekt erstellen, welches als Zwischenhändler (Interop) funktioniert (sofern du dann das C Programm damit zusammen kompilierst und linkst).
Bei diesem C++/CLI-Projekt referenzierst du also dein C#-Projekt und erstellst eine reine C-API (inkl. Headerdatei), welche dann von deinem C-Projekt eingebunden werden kann.

Für die Benutzung von "UnmanagedExports" müßtest du andersherum ein Plugin-System für dein C-Projekt zur Verfügung stellen (was m.E. jetzt ersteinmal ein bißchen mehr Aufwand wäre, als die C++/CLI-Benutzung).


doubleII - So 05.05.19 12:28

Ok, Danke Dir für die Info. Es wäre einfacher, wenn ich rein auf "C" das Zeug programmiere.


jfheins - So 05.05.19 12:40

Also was mit Sicherheit ginge:

- Ein C# Programm, was einzelne C Methoden aufruft
- Deinen C-Code in ein C++ CLI Programm portieren und dann C# Methoden aufrufen

Zum Teil lässt sich ja C Code sogar direkt per copy/paste nach C# übernehmen :wink: