Gibt es eine Möglichkeit, eine Shared Object-Datei, die in C geschrieben und auf Unix erstellt wurde, über C# P/Invoke aufzurufen?
Oder muss ich Java oder so etwas verwenden?
Gibt es eine Möglichkeit, eine Shared Object-Datei, die in C geschrieben und auf Unix erstellt wurde, über C# P/Invoke aufzurufen?
Oder muss ich Java oder so etwas verwenden?
Mono hat die Fähigkeit, mit nativen Libraries aus C# heraus zu integrieren, die auf dlopen(3) basieren. Sie müssen nur die DllImport-Anweisung mit dem Namen der Library (z.B. 'libform.so.5') verwenden, dann den nativen Code und die Datentypen in eine benutzerfreundliche C#-Klasse einbetten, die sich um all die Low-Level-Dinge kümmert. Diese Seite bietet einen guten Überblick mit vielen Informationen darüber, wie man mit der Umwandlung von Zeigern und anderen unsicheren Typen umgeht.
Sobald Sie Ihre Wrapper-Klasse geschrieben haben, können Sie diese einfach verwenden, ohne sich Gedanken darüber machen zu müssen, dass sie eine native Shared-Library darunter verwendet.
Ich würde sagen, dass es wahrscheinlich keinen einfachen Weg gibt, insbesondere wenn Sie C# unter Windows meinen. In diesem Fall müssten Sie etwas haben, das in der Lage wäre, das gemeinsam genutzte Objekt zu entschlüsseln und den Code darin zu erhalten, so etwas wie eine Neuimplementierung der ABI für GNU/Linux. Außerdem müssten auch andere Bibliotheken vorhanden und verwendbar sein, wie z. B. die C-Laufzeitbibliothek und so weiter. Dies würde wahrscheinlich einen sehr bedeutenden Aufwand erfordern.
Was das direkte Ausführen unter Linux/Mono betrifft, siehe diese Antwort: Aufruf der UNIX und Linux freigegebenen Objektdatei .so von c# .
Sie könnten auch versuchen herauszufinden, was Open Office macht, http://packages.debian.org/lenny/cli-uno-bridge könnte hilfreich sein; aber dies ist eher eine Schnittstelle als eine direkte Verknüpfung der beiden.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.