Autor Beitrag
doubleII
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Sa 04.05.19 20:13 
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.
www.nuget.org/packages/UnmanagedExports

Hier anbei ein Beispiel.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 05.05.19 09:02 
Das ist direkt nicht möglich, da C# eben auf der CLR aufsetzt (und diese bei einem C oder C++ Programm nicht eingebunden ist).
Du könntest aber ein C++/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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: 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: