mit c # dll in Projekt C ++

8

Ich möchte dll in C # (Visual Studio 2008) in C ++ Projekt (Visual Studio 2003) verwendet verwenden. wie geht das ? bitte heeelp

    
Monika 26.09.2010, 21:32
quelle

6 Antworten

11

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.

     
  1. 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)

  2.   
  3. 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)

  4.   
  5. 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)

  6.   
  7. 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)

  8.   
    
Dirk Vollmar 26.09.2010, 21:46
quelle
1

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.

    
Darin Dimitrov 26.09.2010 21:36
quelle
1

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.

    
kervin 26.09.2010 21:41
quelle
1

Wie Darin sagte, ist ein Weg über COM. Die anderen zwei Arten (ich weiß) sind:

  • Sie können eine DLL im gemischten Modus in C ++ erstellen. Diese DLL kann verwalteten Code enthalten und aufrufen, sie kann jedoch auch nicht verwaltete Funktionen wie eine normale C ++ - DLL exportieren. Es kann wie jede andere C ++ DLL
  • enthalten sein
  • Es ist viel schwieriger, aber Sie können auch die CLR hosten. Google für "CLR-Hosting", um Details über die API oder Beispiele zu finden.
Niki 26.09.2010 21:43
quelle
1

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%     
Tim Whitehead 26.11.2013 19:14
quelle
0

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.

    
Vaibhav 26.09.2010 21:43
quelle

Tags und Links