Zbudowałem DLL w języku C#. Teraz chcę użyć R Environment do wywoływania funkcji w tej bibliotece DLL. Środowisko R obsługuje wywoływanie niezarządzanych bibliotek C/C++, ale nie w bibliotekach .NET DLL. Moje pytanie brzmi: czy mogę wywoływać funkcje w bibliotece DLL z biblioteki C# C++? Jeśli tak, czy masz link do informacji o tym, jak to zrobić?Czy możesz wywołać bibliotekę DLL z biblioteki C#?
Odpowiedz
Najbardziej prostym sposobem na zrobienie tego jest odsłonięcie jednej z klas C# w bibliotece DLL C# jako obiektu COM, a następnie utworzenie jej instancji z biblioteki DLL C/C++. Jeśli nie jest to dopuszczalna opcja, musisz utworzyć bibliotekę DLL w trybie mieszanym w trybie C++ (zawierającą zarówno kod zarządzany, jak i niezarządzany). Twoja biblioteka DLL w C/C++ może wywoływać wyeksportowane funkcje w bibliotece DLL w trybie mieszanym, która z kolei może przekazywać dalej wywołania do klasy C#.
Ten artykuł może ci pomóc:
Aktualizacja: Istnieje narzędzie o nazwie mergebin że statki z .NET SQLite wrapper można użyć do tworzenia mieszany tryb natywny/zarządzanego DLL. Pobierz kod źródłowy z:
SQLite for ADO.NET 2.0 (SourceForge)
Musisz znaleźć exe w folderze bin\tools
.
Kev
Dzięki za link Kev - ciekawa lektura. – Guy
To jest całkiem łatwe. Po prostu użyj NuGet, aby dodać pakiet "UnmanagedExports" do swojego projektu .Net. Aby uzyskać szczegółowe informacje, patrz https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports.
Można następnie eksportować bezpośrednio, bez konieczności wykonywania warstwy COM. Oto przykładowy kod C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using RGiesecke.DllExport;
class Test
{
[DllExport("add", CallingConvention = CallingConvention.Cdecl)]
public static int TestExport(int left, int right)
{
return left + right;
}
}
R powinien być w stanie załadować TextExport tak jak zwykły dll C.
- 1. Jak wywołać funkcję DLL C++ z C#
- 2. C++ Załaduj bibliotekę DLL z podkatalogu?
- 3. C++ podłączenie biblioteki DLL?
- 4. Czy można wywołać bibliotekę kodów w innym pliku biblioteki?
- 5. Czy biblioteka DLL może wywoływać bibliotekę .NET DLL?
- 6. Czy mogę odtworzyć inżynierię własną bibliotekę dll?
- 7. Eksportowanie funkcji z biblioteki dll C++ do C# P/Invoke
- 8. Jak wywołać metody w C# dll z mojego kodu C?
- 9. Skompiluj bibliotekę DLL z kodem Pythona
- 10. Załaduj bibliotekę DLL częściej niż raz?
- 11. Jak wywołać C++ DLL w C#
- 12. Wywołanie biblioteki dll z C++, C# i ruby
- 13. Jak wyeksportować klasę C++ jako bibliotekę DLL?
- 14. Jak wyeksportować klasę C++ z biblioteki dll?
- 15. Jak zabezpieczyć bibliotekę .NET DLL
- 16. Czy odczytać wersję biblioteki .NET DLL z C#?
- 17. Odsyłacz do biblioteki DLL z innej biblioteki DLL
- 18. Jak utworzyć bibliotekę DLL ActiveX w Visual C++
- 19. Możliwe wywołanie zarządzanej biblioteki DLL z niezarządzanego C++?
- 20. Wyśmiewanie biblioteki Microsoft DLL
- 21. Używanie biblioteki DLL Delphi w C#
- 22. Tworzenie dll dynamiczne biblioteki z C w R (Windows)
- 23. Jak utworzyć bibliotekę DLL, która będzie używana w C#
- 24. W Kohana, czy możesz wywołać błąd 404?
- 25. Statyczne biblioteki, biblioteki dynamiczne, biblioteki DLL, punkty wejścia, nagłówki ... jak wydostać się z tego żywy?
- 26. Nie można zdebugować niezarządzanej biblioteki DLL z C#
- 27. Czy możesz użyć biblioteki .net 3.5 DLL z witryną .net 2.0?
- 28. Jak zbudować bibliotekę importu (.lib) ORAZ DLL w Visual C++?
- 29. Eksportowanie symbolu globalnego z biblioteki DLL Delphi
- 30. Używanie zarządzanego dll C++ z C#
Ten tryb mieszany C++ DLL brzmi tak, jakby to wystarczyło. Właśnie zapoznałem się z dostępnymi szablonami, aby utworzyć projekt DLL w trybie mieszanym za pomocą VS2008, ale go nie widzę. Jak byś zaczął używać biblioteki DLL w trybie mieszanym? – Guy
Jeśli utworzysz nową bibliotekę klas C++, która utworzy projekt C++ .NET DLL. Tak długo, jak ustawienie "Obsługa języka Common Language Runtime" jest ustawione na "Obsługa języka Common Language Runtime (/ clr)", możesz używać zarówno zarządzanego, jak i niezarządzanego kodu w projekcie. – Andy