Wie verwende ich ein C ++ - Projekt in einer .NET-Anwendung?

Ich bin ein regelmäßiger .NET-Entwickler mit dem Ziel, eine C ++ - Bibliothek in ein .NET-Projekt zu integrieren. Ich habe ein paar Ideen, aber da ich C ++ im Allgemeinen noch nicht kenne, sind mir die Grenzen der Technologie, mit der ich arbeiten möchte, nicht bekannt. Das C ++ - Projekt ist im Wesentlichen ein schneller Soundrenderer, der mehrspurige Audiodateien mit einer Reihe verschiedener Nachbearbeitungstricks wiedergeben kann. All dies ist cool, aber wenn man bedenkt, dass ich eine einfache .NET WinForms-App habe, in die ich integrieren möchte, sieht es etwas chaotisch aus.

Erstens hat das C ++ - Projekt keine .NET-Bindungen oder ActiveX / COM-Integration. Es ist ein einfaches MS VC ++ 9 Projekt. Wenn ich mit dem Projekt in meiner .NET-App arbeiten will, muss ich das irgendwieSchnittstelle damit, dh. Klasseninstanzen erstellen, Eigenschaften festlegen, Methoden aufrufen, Daten ein- und auslagern usw.

Zweitens kann es als eigenständige Windows-App ausgeführt werden und verwaltet seine eigenen Fenster mithilfe der MS Windows-API. Das ist in Ordnung, aber irgendwie brauche ich die .NET VMLaufen Verwalten der Show im Hintergrund und Ausführen meines gesamten C # -Codes. Ich schreibe kein C ++, also muss ich mich an C # halten, um eine App um diese Bibliothek zu erstellen.

Drittens, ob ich im selben Prozess wie die C ++ - Bibliothek arbeite oder nicht, ich brauche eine Möglichkeit dazubuild / interface / debug Diese 2 separaten Apps, als ob sie eine wären. Ich habe keinen Hintergrund in der C ++ - Programmierung, außer der Tatsache, dass ich ein paar C ++ - DLLs für die Hochleistungs-Datenmanipulation geschrieben habe.

Also, viele Fragen und keine Ahnung, wie ich anfangen soll!

Ich kann diese Bibliothek vollständig kompilieren und in eine VC-EXE-Datei laden, aber wie soll ich das tun?mitkompilieren mein .NET Code hinein? Oder wie kompiliere ich den C ++ - Code in die .NET-EXE-Datei, damit er in einer verwalteten Umgebung ausgeführt wird? Beachten Sie, dass es nicht für diesen Zweck entwickelt wurde und sich möglicherweise schlecht verhält, wenn ich versuche, zu viel zu ändern.

Das Hauptproblem istSchnittstelle damit. Wie mache ichentlarven Einige C ++ - Klassen, auf die von .NET aus zugegriffen werden soll? Ich weiß genau, welche Klassen ich benötige, und ich benötige nur ein paar Dutzend Klassen mit ihren relevanten Methoden / Eigenschaften, um in .NET verfügbar zu sein. Handschrift macht mir nichts ausWrapper-Klassen in .NET, damit die .NET-VM die Klassenstruktur der hin und her übertragenen Bytes versteht. Ich hoffe, ich kann direkt mit C ++ - Objekten aus einer verwalteten Umgebung arbeiten, sodass der größte Teil meines Codes in .NET verbleiben kann.

Müsste ich auf Sockets oder etwas anderes zurückgreifen, um damit zu kommunizieren, selbst wenn ich es als unabhängige App ausführen würde? Dies ist der absolut schlimmste Fall und ich werde alles tun, um dies zu vermeiden.

Für jede Hilfe oder Hinweise bin ich dankbar. Ich hoffe, dass ich mich und meine Aufgabe klar gemacht habe und dass meine Fragen spezifisch genug und beantwortbar sind. Danke für jede Hilfe!

Bearbeiten: Kann ich verwenden, wenn ich Wrapper-Klassen schreibe oder sie generiere?P / Invoke Erstellen von Klasseninstanzen und Aufrufen von Methoden und Ausführen von systemeigenem C ++ - Code im Hintergrund? Wo wird der Speicher für solche C ++ - Objekte gespeichert und verwaltet? Innerhalb oder außerhalb des .NET-Heaps?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage