c# - program - swig pythoncode




Was sind die besten Praktiken bei der Verwendung von SWIG mit C#? (2)

Hat jemand da draußen die SWIG- Bibliothek mit C # benutzt? Wenn ja, welche Fallstricke haben Sie gefunden und wie können Sie die Bibliothek am besten nutzen? Ich denke darüber nach, es als Wrapper für ein Programm zu verwenden, das in C geschrieben wurde, und ich möchte die Header-Dateien umhüllen, wo ich sie in meiner .NET-Anwendung verwenden kann.

Bearbeiten: Einige Erläuterungen zu den Zielbetriebssystemen.

Ich plane, die Anwendung auf Linux und Windows zu starten, daher der Grund, warum ich SWIG untersuche. P / Invoke ist keine Option.


Ich habe versucht, SWIG zu verwenden, um ein Projekt C ++ für die Verwendung in .NET vor ein paar Jahren zu wickeln.

Ich kam nicht sehr weit, da es ein riesiger Schmerz war, die Konfiguration zu erzeugen, die SWIG benötigte. Zu der Zeit wollte ich nur eine Lösung, keine andere Sprache / api / etc zu lernen. SWIG ist heutzutage vielleicht einfacher zu benutzen, ich kann es dir nicht sagen.

Am Ende haben wir Managed C ++ verwendet, um das C ++ - Projekt zu umbrechen. Es hat wirklich gut funktioniert.

Wenn Sie nur Funktionen direkt aus einer DLL heraus aufrufen, würde ich vorschlagen, dass Sie sich über keine der oben genannten Dinge Gedanken machen und nur P / Invoke verwenden


Für mein letztes Projekt, hier ist die gesamte C # SWIG Konfigurationsdatei:

%module mdProject

%{
#include "mdProject.h"
%}

Ich habe es in SWIG zusammengestellt mit:

swig -csharp -c++ -I../../Include mdProject.i

Das erzeugte eine Project.cxx, die ich kompilierte und direkt in die 'Haupt'-DLL verband, also brauchte ich keine zweite C ++' Helfer'-DLL. SWIG hat auch eine Menge C # -Dateien generiert, die ich in eine .NET DLL kompiliert habe. Meine anderen Wrapper (Java, PHP usw.) verwenden eine Hilfs-DLL.

Wie bei @patrick erwähnt, verwendet SWIG P / Invoke, wenn Sie also ein Problem damit haben, müssen Sie eine andere Lösung finden.

Wenn Sie Typen verwenden, die vom gewöhnlichen abweichen (Leerstellen, Strukturen usw.), müssen Sie etwas mehr Arbeit machen, um es richtig zu machen, aber für die durchschnittliche API, die int, char * usw. verwendet, ist es in Ordnung.





swig