Automatisches erstellen von C# - Wrapper aus c-Headern?
Gibt es eine Möglichkeit zum automatischen erstellen von p/invoke-Wrapper für .net aus einer c-header?
Natürlich kann ich auch erstellen Sie Sie mit der hand, aber pflegen würde schmerzhaft sein, und ich würde wahrscheinlich irgendwo einen Fehler wodurch schwer zu Debuggen, stürzt ab.
Ich versuchte einen SCHLUCK, aber es hat die volle Klassen, in denen einfache Strukturen ausreichend wäre.
Ein weiteres problem mit SWIG ist, dass es erfordert zusätzliche interop-code auf die c-Seite.
Ich würde es bevorzugen, wenn die Ausgabe arbeitete auf mono zu, aber das ist nicht notwendig.
Andere Sache, die ich konnte mit der Arbeit ist ein Programm, welches analysiert die c-header und erzeugt einen Ausgabe in einem schönen intermediate-format, wie xml, von dem ich die C# - wrapper mich.
Edit:
PInvoke Interop Assistant ist das, was ich brauchte.
Es gibt einige kleine Probleme mit ihm, obwohl:
* Es übersetzt "unsigned char*" string, wo ich lieber IntPtr
* Es wird davon ausgegangen, dass size_t=int=long=32bit. Dies ist derzeit für mich wahr, aber nicht wahr, auf jeder Plattform.
Gibt es eine saubere Möglichkeit, dass zu beheben? Sonst verwende ich ein bisschen suchen-und-ersetzen auf den c-code vor der Konvertierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den PInvoke Interop Assistant werden sollen, um eine bessere Passform für Sie, es wurde speziell entwickelt, um die Arbeit mit C-code.
Nur Vorsicht, dass kein tool erhalten Sie eine zu 100% garantierte Lösung, C Erklärungen sind Weg zu vieldeutig, um garantiert einen völlig störungsfreien Ergebnis. Probleme verursacht durch Zeiger, die überall in C-code. Es gibt keine Möglichkeit zu sagen, dass ein Zeiger wird verwendet, um lese-oder Schreibvorgänge im Speicher. Oder beides. Oder wer ist verantwortlich für die Freigabe, der Speicher, wird darauf zu.
Dies ist ein großer hangup für static code Analyzer wie gut, das können Sie nicht machen einen anständigen job, wenn Sie nicht wissen, wie ein Zeiger verwendet wird. Sie können nur ableiten, es von der Nutzung, aber das ist eine Huhn-und-ei-problem, der Gebrauch kann verkehrt sein. Microsoft adressiert das problem in Ihren eigenen Header mit SAL Anmerkungen, extra-markup, neutral zu einem compiler, aber analysiert werden kann, indem ein code analyzer. Sie explizit den Verwendungszweck ein Zeiger.
Auch von den Pinvoke Interop Assistant deshalb kann es tun, einen besseren job auf winapi-Deklarationen. Aber natürlich funktioniert nur auf Microsoft-Header, dieser SAL Anmerkungen sind in der Regel fehlt auf geschriebenen code durch einen C-Programmierer beschäftigt.
System.Runtime.InteropServices
für jede und jeden-Attribut).Wenn ich verstehe deine Frage richtig, Sie sind im Grunde Fragen, ob es einen Weg gibt, das zu tun, was SCHLUCK macht.
Natürlich, du willst es ein bisschen anders, so eine option wäre, nehmen die SCHLUCK-code und ändern Sie es zu arbeiten, wie Sie möchten.