Frage

Wir haben nativen Win32 C ++ Code und eine Reihe von C # Baugruppen, die wir aus dem C ++ Code aufrufen möchten. Ich Zusammenfassungen unsere optios wie:

  1. Mit COM. Der C # -Code müßte mit zusätzlichen Attributen (GUID, ComVisible) eingerichtet werden. Die C # Baugruppen müssten regasm registriert werden und würde dann auf die native C ++ Code über COM.

  2. zur Verfügung
  3. Verwenden Sie eine C ++ / CLI (ehemals verwaltete C ++) Wrapper-Klasse. Eine C ++ Klasse könnte auf das native C ++ Projekt hinzugefügt werden. Diese Klasse würde mit / clr kompiliert werden. Der native C ++ Code nennen würde die C ++ / CLI-Klasse, die den .NET-Code dann nennen würde. KOM beteiligt. Die CLR wird durch Magie begann als mit Rangierung von den C ++ / CLI extenstions behandelt erforderlich.

  4. eine Instanz der CLR in dem nativen C ++ Code Moderator.

Ich werde Option 3 zu diskontieren, wie ich die Vorteile sehen nicht über die Option 2 anders als wir die Notwendigkeit einer Wrapper-Klasse verlieren. Die Frage ist also, was ist die Vor / Nachteile von Option 1 im Vergleich zu Option 2?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Option 2 wird die beste Leistung, und sein, die meist nahtlosen und wartbar, IMO.

Es gibt wirklich keinen Vorteil Option 1, die ich gefunden habe. Mit C ++ / CLI viel besser zu funktionieren scheint, arbeitet schneller und viel einfacher im Allgemeinen.

Sie können auch, btw, benutzen Sie einfach die C # Montage direkt ohne eine Wrapper-Klasse mit. Dies erfordert alle Dateien kompilieren, die es mit / CLR verwenden möchten, aber es funktioniert ganz gut.

Andere Tipps

Für die Option 1 Ihr Haupt Pro wäre nicht eine Wrapper-Klasse zu schreiben, die behaarten bekommen kann je nach Projekt.

Für Option 2 werden Sie nicht Ihre verwalteten Bibliothek zu modifizieren, nicht verwalteten Anwendung zu erleichtern, das ist manchmal nicht eine Option.

Für mich kommt es darauf an, wo Sie wollen Ihre Code-Änderungen machen.

Mit der Option 2 Sie haben auch eine ziemlich einfache Art und Weise der anschließend Ihre gesamte Anwendung in C ++ / CLI konvertieren die verwalteten / unmanaged Übergänge zu vermeiden, die Sie erhalten. Die Übergänge könnte ein Problem sein, je nachdem, wie Sie Ihre referenzierten Assemblys heißt verwenden, um eine Leistung getroffen zu werden.

Bisher habe ich nur positive Erfahrungen mit C ++ / CLI hatte und kann empfehlen, diesen Weg gehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top