2009-08-22 6 views

Antwort

3

Die beste Lösung für die Freigabe eines C# -Objekts zwischen nativem und verwaltetem Code ist die Verwendung von COM-Interop. Dadurch können Sie eine Schnittstelle eines Objekts im Wesentlichen zwischen verwaltetem Code und der entsprechenden Signatur in C++ freigeben.

Was die Komplexität Seite der Dinge angeht. Die Mehrheit der COM-Interop-Szenarien ist einfach und wirklich nicht komplexer als die gute alte COM-Programmierung. Auf der verwalteten Seite sieht es wirklich nicht anders aus als eine normale Schnittstelle.

Sobald Sie mehrere Threads eingeführt haben oder anfangen, zwischen COM-Apartments herumzuspielen, kann es jedoch etwas knifflig werden.

Nach meiner Erfahrung ist der einfachste Weg, um das zu arbeiten, das Folgende.

  • eine Schnittstelle in C# definieren, die Sie wünschen C++
  • Markieren Sie die Schnittstelle mit dem ComVisible (true) attrbute verwenden, in
  • Run tlbexp auf der Baugruppe, die einen TLB
  • Import der TLB-Datei erzeugt in Ihr natives Projekt

Dies wird die Schnittstellendefinition in beide Ihrer Projekte erhalten. Um dies zwischen den Projekten zu übertragen, sind einige Details in Ihrer Architektur erforderlich.

0

Eine andere Lösung, die ich aus eigener Erfahrung empfehlen kann, ist die Verwendung einer verwalteten C++ - Schnittstelle zwischen den beiden, wenn der C++ - Code, auf den Sie zugreifen möchten, zu groß oder zu komplex ist.

Zum Beispiel verwende ich die RakNet C++ Netzwerkbibliothek in einem C# -Projekt. Die Lösungen sollen entweder eine massive Wrapper-Klasse in C# erstellen, um auf die erforderlichen C++ - Funktionen zuzugreifen, einen C++ - Wrapper um diese Funktionen erstellen, der dann als COM-Interop verwendet werden kann, oder Managed C++ (Visual C++/CLI) verwenden.

Ich entschied mich für Letzteres, was es mir erlaubt, mit C++ auf die RakNet-Bibliothek zuzugreifen, aber die erstellten Klassen können direkt in einem anderen .NET-Projekt verwendet werden. Also wurde die Hauptlogik in diesen Managed C++ - Klassen erstellt, die es mir erlauben, das .NET-Framework und einige seiner wunderbaren Funktionen zu verwenden. In meinem C# -Projekt muss ich einfach die Managed C++ - Bibliothek aufrufen, die mir alle 20 Funktionen liefert, die ich für die Ausführung benötige.

Verwandte Themen