Es gibt mehr als nur COM-Interop, die MSDN FAQ listet auch weniger bekannte Methoden auf:
2.2 Wie rufe ich .NET Assembly von nativem Visual C ++ auf?
Es gibt grundsätzlich vier Methoden zu Rufen Sie .NET-Assembly von nativem VC ++ auf Code. Microsoft All-In-One-Code-Framework hat funktionierende Beispiele dafür demonstrieren Sie die Methoden.
Natives VC ++ - Modul ruft CLR-Hosting-APIs auf, um CLR zu hosten, zu laden und zu laden Rufen Sie die .NET Assembly auf. (Alles in einem Codeframe-Beispielcode: CppHostCLR)
Wenn die .NET-Assembly als native COM-Komponente verfügbar gemacht werden kann VC ++ Modul kann in .NET aufrufen Assemblierung über .NET - COM-Interop. (All-In-One-Codeframe-Beispiel Code: CppCOMClient)
Reverse PInvoke: Der native Code des verwalteten Codes, der einen Delegaten übergibt Der native Code kann zurückrufen. (All-In-One-Codeframe-Beispiel Code: CSPInvokeDll)
Wenn das Modul, das nativen VC ++ - Code enthält, CLR aktivieren kann nativer VC ++ - Code kann aufrufen .NET Assembly direkt durch die "It Just Works ", oder" IJW ", Mechanismus. (All-In-One Code Framework Beispielcode: CppCLIWrapLib)
Sie können .NET-Assemblys nicht direkt aus nicht verwaltetem C ++ - Code verwenden. Eine mögliche Lösung besteht darin, die Assembly als COM-Objekt mit dem regasm.exe -Dienstprogramm verfügbar zu machen und anschließend zu verwenden es von C ++. Beachten Sie, dass .NET-Typen, die als COM-Objekte verfügbar gemacht werden sollen, möglicherweise mit dem [COMVisible(true)]
Attribut und würde weiterhin das auf dem Zielcomputer mit dem C ++ - Code installierte .NET Framework benötigen.
Es gibt viele Möglichkeiten, dies zu tun.
Ist die C # DLL eine COM DLL? Wenn dies der Fall ist, können Sie die reguläre COM-API / Spezifikation verwenden, um in Ihrem C ++ - Programm darauf zuzugreifen. Es gibt viele Tutorials, um Ihre C # DLL COM sichtbar zu machen. Es ist nicht so schwierig, ein paar kompilieren Schalter und C # Attribute im Grunde.
Können Sie andernfalls Ihr C ++ - Projekt mit dem / clr Compiler-Schalter kompilieren? In diesem Fall können Sie die Richtlinie verwenden, um Ihre C # zu importieren. DLL direkt.
Wie Darin sagte, ist ein Weg über COM. Die anderen zwei Arten (ich weiß) sind:
Nachdem Sie die Compileroption "Resulve # using References" (Projekt- & gt; C / C ++ - & gt; General) auf das Verzeichnis mit der gewünschten Assembly gesetzt haben, fügen Sie eine Zeile wie diese in Ihren Code ein.
> %Vor%Erstellen Sie eine Bibliotheksdatei [.Tlb], und nur wir können die DLLs verwenden. Sie müssen .TLB (Type Library-Datei) Ihrer ursprünglichen c # DLL erstellen und diese.TLB-Bibliothek im VC ++ - Code verwenden. Dazu müssen Sie die .TLB-Datei auf Ihrem PC registrieren, ebenso wie es notwendig ist, diese .TLB-Datei in Ihre vc ++ Anwendung zu importieren. Wenn Sie C # DLL schreiben, denken Sie daran, Interfaces zu verwenden, die in der Klasse implementiert werden.