Mam zarządzaną bibliotekę C++, do której odwołuję się z projektu C#. Projekt C# zostanie skompilowany jako AnyCPU. Czy istnieje sposób na skompilowanie 32-bitowej i 64-bitowej wersji biblioteki DLL Managed C++, a następnie powiadomienie projektu C# w środowisku uruchomieniowym, aby załadowało poprawne, w zależności od architektury, która jest uruchamiana?Zarządzane C++ i AnyCPU
Odpowiedz
omawia złożony sposób na to, i zobacz komentarz Stefana, który omawia znacznie prostsze metody, które mają zastosowanie do niektórych aplikacji.
Nie wiem jak "odwołać się" do biblioteki dll C++ (P/Invoke vs .net assembly reference), ale w dowolny sposób można zamienić dwie wersje pliku .dll w czasie instalacji.
Podstęp do pobrania biblioteki DLL AnyCPU do gry przy użyciu biblioteki dll C++ jest w trakcie wykonywania, upewnij się, że zespół nie może załadować biblioteki dll C++, a następnie zasubskrybuj zdarzenie AppDomain AssemblyResolve. Kiedy zespół próbuje załadować bibliotekę DLL i się nie powiedzie, twój kod ma możliwość określenia, która biblioteka DLL musi zostać załadowana.
Zapisywanie się na razie wygląda mniej więcej tak:
System.AppDomain.CurrentDomain.AssemblyResolve += Resolver;
obsługi zdarzeń wygląda mniej więcej tak:
System.Reflection.Assembly Resolver(object sender, System.ResolveEventArgs args)
{
string assembly_dll = new AssemblyName(args.Name).Name + ".dll";
string assembly_directory = "Parent directory of the C++ dlls";
Assembly assembly = null;
if(Environment.Is64BitProcess)
{
assembly = Assembly.LoadFrom(assembly_directory + @"\x64\" + assembly_dll);
}
else
{
assembly = Assembly.LoadFrom(assembly_directory + @"\x86\" + assembly_dll);
}
return assembly;
}
Stworzyłem prosty projekt pokazujący, jak uzyskać dostęp do C++ funkcjonalność z dll AnyCPU .
- 1. Zarządzane atrybuty zespołu C++
- 2. Zarządzane C++ tworząc most między C# i C++
- 3. C# Jak liczyć zarządzane wątki w moim AppDomain?
- 4. Całkowicie zarządzane rozwiązanie do obsługi baz danych?
- 5. W jaki sposób zarządzane są sekwencje według JPA i Hibernate?
- 6. Uruchom AnyCPU jako 32-bitowy w systemach 64-bitowych
- 7. Kolejka Finalizer rosnąca, ale zarządzane stosy nie
- 8. Core Data łączy dwa obiekty zarządzane obiekty
- 9. Oracle Zarządzane ODP.NET nie może odnaleźć tnsnames.ora
- 10. Błąd podczas próby wypłaty na konto zarządzane
- 11. Pisanie wieloplatformowego (32-bitowego i 64-bitowego kompatybilnego) programu dla systemu Windows (jak AnyCPU w .NET)
- 12. Obejście problemu z brakiem lambdasów, które mogą przechwytywać zmienne zarządzane
- 13. W pełni zarządzane implementacje pamięci .NET w pamięci współużytkowanej?
- 14. Przestrzeń nazw Xml i C# csproj
- 15. Jak zdebugować zarządzane BHO z Visual Studio 2010
- 16. Zastrzyki EJB kontra tylko ziarna zarządzane przez JSF
- 17. Zarządzane przesyłanie plików - wszystkie dostępne opcje open source?
- 18. ios - Dodaj urządzenie do obsługi profili Profile zarządzane przez Xcode
- 19. Jak popychać pojemniki Docker zarządzane przez Docker-komponować do Heroku?
- 20. moduły "uwzględnij" py2exe: kiedy powinny być zarządzane ręcznie?
- 21. Wartości szyfrowania zarządzane przez AES zawsze kończą się na ==?
- 22. Ładowanie pliku CSV do Core Data Zarządzane sqlite db
- 23. Jak dodać niestandardowe zarządzane metadane w grupie Yammer
- 24. Jak trwale usunąć zarządzane przez Google maszyny wirtualne
- 25. Wiosenne transakcje zarządzane, EclipseLink JPA, niestandardowy poziom izolacji
- 26. W jaki sposób zarządzane są podstawowe biblioteki Perla?
- 27. Jak skonfigurować zarządzane zależności w projekcie SBT 0.11 z Build.scala
- 28. Zarejestruj zarządzane zestawy z COM bez użycia GAC
- 29. Ukierunkowane na procesory x64 może czasami powodować bardzo niską wydajność niż w przypadku anycpu
- 30. ForkJoinPool, Phaser i zarządzane blokowanie: w jakim stopniu działają one przeciwko impasom?
Ciekawe, dlaczego dostałem głos w dół za ten komentarz? –
Ja też. Nie jestem pewien, czy zrobiłbym to w produkcji, ale jest to przynajmniej sensowny pomysł. Wycofane z powrotem do zera, aby przywrócić niesprawiedliwość –
Dzięki Ivan! Doceniam twoje wsparcie :) –