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?
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.
Dieser Artikel könnte Ihnen helfen:
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
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.
Tags und Links .net c# c++ dll cross-platform