Als erstes legen wir eine kleine Library an die die Funktion enthält die wir später aufrufen wollen.
//compile with gcc -dynamiclib test.c -o test.dylib
#include
int test(const char* s) {
printf("Printing from C: %s\n",s);
return 666;
}
Nichts dramatisches, unser Programm soll lediglich etwas Text übernehmen ausgeben und einen Integer an unser C# Programm zurück liefern. Nach dem kompilieren erhalten wir eine dynamische Bibliothek mit Namen test.dylib.
Unser C# Code ist ähnlich spektakulär aufgebaut:
using System;
using System.Runtime.InteropServices;
class PTest {
[DllImport("test.dylib")]
public static extern int test(string s);
public static void Main() {
Console.WriteLine(test("this is a test"));
}
}
Eine interessante Anmerkung nebenbei: test.dylib muss zum Zeitpunkt der Übersetzung nicht existieren.
Jetzt ist man also ohne weiteres in der Lage mit Libs wie z.B. libzfs oder libdtrace von C# aus zu kommunizieren um stark integrierte (aber logischerweise nicht mehr plattformunabhängige) Applikationen zu schreiben.