Können Sie eine C # DLL von einer C DLL aufrufen?

8

Ich habe eine DLL in C # erstellt. Jetzt möchte ich die R-Umgebung verwenden, um Funktionen in dieser DLL aufzurufen. Die R-Umgebung unterstützt das Aufrufen von nicht verwalteten C / C ++ - DLLs, jedoch nicht von .NET-DLLs. Meine Frage ist also, kann ich Funktionen in einer C # DLL von einer C / C ++ DLL aufrufen? Wenn ja, haben Sie einen Link zu Informationen dazu?

    
Guy 08.04.2009, 02:45
quelle

3 Antworten

9

Der einfachste Weg, dies zu tun, besteht darin, eine der C # -Klassen in Ihrer C # -DLL als COM-Objekt verfügbar zu machen und dann eine Instanz davon aus Ihrer C / C ++ - DLL zu erstellen. Wenn dies keine akzeptable Option ist, müssen Sie eine C ++ - DLL im gemischten Modus erstellen (die sowohl verwalteten als auch nicht verwalteten Code enthält). Ihre C / C ++ - DLL kann exportierte Funktionen in Ihrer Mixed-Mode-DLL aufrufen, die ihrerseits die Aufrufe an Ihre C # -Klasse weiterleiten kann.

    
Andy 08.04.2009, 02:48
quelle
3

Dieser Artikel könnte Ihnen helfen:

CLR-Hosting-APIs (MSDN)

Aktualisiert: Es gibt ein Tool namens mergebin , das mit dem .NET SQLite-Wrapper ausgeliefert wird, den Sie zum Erstellen einer nativen / verwalteten DLL im gemischten Modus verwenden können. Besorgen Sie sich den Quellcode von:

SQLite für ADO.NET 2.0 (SourceForge)

Sie finden die exe im Ordner bin\tools .

Kev

    
Kev 08.04.2009 02:51
quelle
0

Es ist eigentlich ziemlich einfach. Verwenden Sie einfach NuGet, um das "UnmanagedExports" -Paket zu Ihrem .Net-Projekt hinzuzufügen. Einzelheiten hierzu finden Sie Ссылка .

Sie können dann direkt exportieren, ohne eine COM-Ebene erstellen zu müssen. Hier ist der Beispiel-C # -Code:

%Vor%

R sollte TextExport wie eine normale C-DLL laden können.

    
Rob Deary 24.04.2015 19:10
quelle

Tags und Links