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.
2 Kommentare:
Hm, mal sehen was meine Glaskugel dazu sacht: "...ZFS-Treiber für Windows ...". Aha, das Mistding ist schon wieder beschlagen ;-) Aber schön wärs ja, ein bisschen Interoperabilität wäre für die Popularität von ZFS und (Open)solaris vielleicht nicht schlecht (für die Stabilität vielleicht schon eher, aber das ist ein anderes Thema).
ZFS auf Windows wäre sicherlich DAS Ding. Aber ich würde mir schon wünschen das Apple mal langsam damit aus dem Quark kommen würde ;)
Kommentar veröffentlichen