C ++ / CLI Automatischer Wrapper Generator

8

In unserem Projekt haben wir eine erhebliche Menge an nativem C ++ - Code, den wir gerne von einer brandneuen UI-Schicht, die in .Net geschrieben werden soll, wiederverwenden möchten.

Ich würde gerne C ++ / CLI für diese Angelegenheit verwenden, und ich habe gesehen, dass es eine ziemlich geradlinige und ziemlich technische Art gibt, dies zu tun, indem man native Klassen mit Thin-verwalteten Klassen umschließt. Ich würde erwarten, ein Werkzeug zu finden, das diese Aufgabe automatisiert, da es mir wirklich als ein technisches Problem ohne viel "menschliches" Denken erscheint.

Es gibt ein solches Tool, das explizite p / invoke dafür verwendet - siehe Ссылка . Die Sache ist, dass explizite p / invoke mehr umständlich und weniger effizient in der Leistung ist.

Gibt es jemanden da draußen, der mit einem solchen Tool vertraut ist?

Gibt es einen Grund, warum ein solches Tool noch nicht verfügbar ist?

    
Elad 24.12.2012, 13:40
quelle

2 Antworten

7

Der Grund, warum p / invoke weniger effizient ist, ist, dass es eine sehr generische Schnittstelle zu jeder Funktion sein muss, die nur die Signatur kennt. Ihr hypothetischer Wrapper-Generator wird nicht besser funktionieren.

Auf der anderen Seite hat der Entwickler, der eine benutzerdefinierte Wrapper-Klasse programmiert, viel mehr Informationen über Funktionen, die zusammen verwendet werden usw. und kann daher viele langsame und unnötige Konvertierungen vermeiden, zum Beispiel indem er Werte direkt in der Wrapper und konvertiert sie nicht in ein .NET-freundliches Format.

Es ist also nicht so, dass solch ein Werkzeug unmöglich ist, es gibt nur wenig bis gar keinen Nutzen. Wenn Sie Wert auf Leistung legen, schreiben Sie Ihren eigenen Wrapper mit Smart-Pointern für die Lebensdauerverwaltung und dergl.

Natürlich bietet p / invoke nur Zugriff auf bare Funktionen. Das ist, wo SWiG hilfreich sein sollte, um alle C ++ - Klassenschnittstellen über bloße exportierte Funktionen verfügbar zu machen.

Ich habe einen Hinweis auf ein Werkzeug gefunden, wonach Sie gesucht haben, obwohl es ziemlich scharf ist:

Ben Voigt 25.12.2012, 02:50
quelle
1

Explizite p / invoke ist nicht notwendig schlecht. Es kommt wirklich darauf an. Die folgenden Links enthalten zusätzliche Informationen, die Sie möglicherweise lesen möchten. Wie sie in ihren spezifischen Beispielen erfahren haben, ist P / Invoke mit unterdrückter Sicherheit schneller als alle anderen Methoden des Aufrufs in native DLLs, einschließlich C ++ / CLI.

Ссылка

Ссылка

Wir haben ein Tool, an dem Sie vielleicht interessiert sind. Es ist ein C # -Wrapper-Generator für C ++ DLL. Nur die C ++ DLLs, die von VS kompiliert werden, werden unterstützt.

Mit dem Tool können Sie die C # -Wrapperbibliothek direkt aus der DLL-Datei und den C ++ - Headerdateien generieren. Es generiert ein Visual Studio-Projekt mit allen C # -Klassendateien. Alle Standard-C ++ - Klassen, Template-Klassen und Ihre eigenen Klassen werden unterstützt. Sie müssen keine einzelne Codezeile schreiben.

Bitte lesen Sie das Detail unter dem folgenden Link.

C # /. NET PInvoke Interop SDK

(Ich bin der Autor des Tools)

    
xInterop 19.04.2013 05:28
quelle

Tags und Links