Aufrufen einer C # -Bibliothek aus Native C ++ (mithilfe von C ++ \ CLI und IJW)

Hintergrund: Im Rahmen einer größeren Aufgabe muss eine C # -Bibliothek für nicht verwalteten C ++ - und C-Code zugänglich gemacht werden. Um diese Frage selbst zu beantworten, habe ich in den letzten Tagen / Wochen C ++ / CLI gelernt.

Es scheint verschiedene Möglichkeiten zu geben, eine C # -DLL aus nicht verwaltetem C ++ und C zu verwenden. Einige der kurzen Antworten lauten: Verwenden von Interlope-Diensten, Verwenden von .com. und regasm, Using PInvoke (das anscheinend nur von C # nach C ++ geht) und using IJW in C ++ / CLR (das anscheinend Interlope-Dienste sind). Ich denke, es wäre am besten, eine Bibliothek einzurichten, die möglicherweise ein CLR-Wrapper ist, der IJW verwendet, um meine C # -Dll im Namen von nativem C ++ - und C-Code aufzurufen.

Besonderheiten: Ich muss Werte von string sowie int an eine C # -DLL aus C ++ - Code übergeben und void zurückgeben.

Relevanz: Viele Unternehmen haben viele Ausreden, um C ++, C und C # zu kombinieren. Leistung: Nicht verwalteter Code ist in der Regel schneller, Schnittstellen: Verwaltete Schnittstellen sind im Allgemeinen einfacher zu warten, bereitzustellen und oftmals auch einfacher für die Augen, so Manager. Legacy-Code zwingt uns auch. Es war dort (wie der Berg, den wir bestiegen). Beispiele zum Aufrufen einer C ++ - Bibliothek aus C # sind zwar reichlich vorhanden. Beispiele für das Aufrufen von C # -Bibliotheken aus C ++ - Code sind über Googling nur schwer zu finden, insbesondere wenn Sie aktualisierten 4.0+ -Code anzeigen möchten.

Software: C #, C ++ / CLR, C ++, C, Visual Studio 2010 und .NET 4.0

Frage Details: OK mehrteilige Frage:

Gibt es einen Vorteil bei der Verwendung von COM-Objekten? Oder der PInvoke? Oder eine andere Methode? (Ich habe das Gefühl, dass die Lernkurve hier genauso steil sein wird, obwohl ich in Google Land weitere Informationen zum Thema finde. IJW scheint zu versprechen, was ich möchte. Sollte ich aufhören, nach einer IJW-Lösung zu suchen, und stattdessen darauf fokussieren?) (Vorteil / Nachteil?)

Stimmt es, wenn ich mir vorstelle, dass es eine Lösung gibt, in der ich einen Wrapper schreibe, der IJW in C ++ / CLR verwendet? Wo kann ich weitere Informationen zu diesem Thema finden und nicht sagen, dass ich nicht genug Google oder MSDN angesehen habe, ohne mir mitzuteilen, wo Sie es dort gesehen haben? (Ich glaube, ich bevorzuge diese Option, um klaren und einfachen Code zu schreiben.)

Eingrenzung des Fragenbereichs: Mein wahres Problem und Bedürfnis ist die Beantwortung der folgenden kleineren Frage: Wie richte ich eine C ++ / CLR-Bibliothek ein, die eine nicht verwaltete C ++ - Datei in Visual Studio verwenden kann? Ich denke, wenn ich einfach eine verwaltete C ++ - Klasse in nicht verwaltetem C ++ - Code instanziieren könnte, könnte ich den Rest erledigen (Schnittstellen und Wrapping usw.). Ich gehe davon aus, dass meine größte Torheit darin besteht, Referenzen / # Includes usw. in Visual Studio einzurichten, obwohl klar ist, dass ich andere Missverständnisse haben könnte. Vielleicht könnte die Antwort auf diese ganze Sache nur ein Link zu einem Tutorial oder einer Anleitung sein, die mir dabei helfen.

Forschung: Ich habe immer und immer wieder gegoogelt und Binged mit einigem Erfolg. Ich habe viele Links gefunden, die Ihnen zeigen, wie Sie eine nicht verwaltete Bibliothek aus C # -Code verwenden. Und ich gebe zu, dass es einige Links gab, die zeigen, wie man es mit com-Objekten macht. Für VS 2010 wurden nicht viele Ergebnisse angestrebt.

Verweise: Ich habe immer wieder viele Beiträge gelesen. Ich habe versucht, die relevantesten zu durcharbeiten. Einige scheinen der Antwort quälend nahe zu sein, aber ich kann sie einfach nicht zum Arbeiten bringen. Ich vermute, dass das, was ich vermisse, verblüffend klein ist, z. B. der Missbrauch des Schlüsselworts ref oder das Fehlen eines # include- oder using-Statements, der Missbrauch des Namespace oder die falsche Verwendung der IJW-Funktion oder das Fehlen einer VS-Einstellung muss mit der Kompilierung richtig umgehen usw. Sie fragen sich also, warum Sie den Code nicht einbinden sollten? Nun, ich habe das Gefühl, nicht an einem Ort zu sein, an dem ich den Code, den ich arbeiten muss, verstehe und erwarte. Ich möchte an einem Ort sein, an dem ich es verstehe. Wenn ich dort ankomme, brauche ich vielleicht Hilfe, um es zu reparieren. Ich werde zufällig zwei der Links einfügen, aber ich darf nicht alle auf meinem aktuellen Hitpoint-Level anzeigen.

http://www.codeproject.com/Articles/35437/Moving-Data-between-Managed-Code-and-Unmanaged-Cod

Dies ruft Code aus verwaltetem und nicht verwaltetem Code in beide Richtungen auf, der über C ++ CLR von C ++ nach Visual Basic und zurück geht, und natürlich interessiere ich mich für C #:http://www.codeproject.com/Articles/9903/Calling-Managed-Code-from-Unmanaged-Code-and-vice

Antworten auf die Frage(6)

Ihre Antwort auf die Frage