Ho una DLL C++ gestita a cui faccio riferimento da un progetto C#. Il progetto C# verrà compilato come AnyCPU. Esiste un modo per compilare una versione a 32 bit e 64 bit del dll gestito C++ e quindi dire al progetto C# in fase di esecuzione di caricare quello corretto a seconda dell'architettura che viene eseguita?Managed C++ e AnyCPU
risposta
This article discute un modo complesso per farlo e vedere il commento di Stefan che discute un metodo molto più semplice che si applica ad alcune applicazioni.
Non so come si fa "riferimento" alla DLL C++ (riferimento di assembly P/Invoke vs .net), ma in entrambi i casi è possibile scambiare le due versioni del file .dll al momento dell'installazione.
Il trucco per ottenere la DLL AnyCPU da giocare con la DLL C++, è in fase di esecuzione assicurarsi che l'assembly non può caricare la DLL C++ e quindi iscriversi all'evento AppDomain AssemblyResolve. Quando l'assembly tenta di caricare la DLL e non riesce, il codice ha l'opportunità di determinare quale DLL deve essere caricata.
Sottoscrivere l'evento sembra qualcosa di simile:
System.AppDomain.CurrentDomain.AssemblyResolve += Resolver;
gestore di eventi simile a questa:
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;
}
ho creato un semplice progetto che dimostra come accedere C funzionalità ++ da un dll AnyCPU .
- 1. C# NHibernate e Oracle Managed Client
- 2. Inizializzazione array in Managed C++
- 3. Qual è la differenza tra Managed C++ e C++/CLI?
- 4. Cosa significano le affermazioni "#pragma managed (push, off)" e "#pragma managed (pop)"?
- 5. XNA sostituisce effettivamente Managed Directx?
- 6. Come si digita typeof (int) in Managed C++?
- 7. Come verificare un "riferimento oggetto NULL" in Managed C++?
- 8. JSF Managed Bean crea automaticamente?
- 9. Microsoft sta resettando Managed DirectX?
- 10. NodeJS Managed Hostings vs VPS
- 11. Allineamento struttura C++ x86/x64 + .NET AnyCPU Uso libreria C++ (chiamate/callback)
- 12. AnyCPU/x86/x64 per l'applicazione C# ed è dipendenza C++/CLI
- 13. "AnyCPU" vs "Qualsiasi CPU" in TFS 2010
- 14. Generazione di un COM assembly visibile da Managed C++ (C++/CLI)
- 15. Come passare una funzione di delega C# a un Managed C++ .Dll?
- 16. GAE Managed VM sempre malsano riavvio
- 17. Inietta proprietà managed bean in convertitore personalizzato
- 18. prestazioni di un'applicazione C# costruito su AnyCPU vs piattaforma x64 su una macchina a 64 bit
- 19. Un progetto C# AnyCPU include una dll specifica per la piattaforma
- 20. Esegui AnyCPU come 32-bit su sistemi 64-bit
- 21. namespace Xml e C# csproj
- 22. ODP.NET Managed ConnectionPool si chiude/si apre ogni 3 minuti
- 23. Task Scheduler Managed Wrapper non mostra tutte le attività
- 24. Managed DirectX in esecuzione dall'app .Net Framework 4.0 non cercare
- 25. Finalizer Coda in crescita ma Managed Heaps non
- 26. EWS Managed API: come impostare From of email?
- 27. MEF (Managed Extensibility Framework) esegue la digitazione "duck"?
- 28. Controller (Spring Managed Bean) Scopo Domanda: Singleton, Request or Session?
- 29. Aries managed-service-factory gestisce anche le proprietà?
- 30. Oracle Managed ODP.NET non riesce a trovare tnsnames.ora
Curioso perché ho ottenuto un voto negativo per questo commento? –
Anch'io. Non sono sicuro se lo farei in produzione, ma questa è almeno un'idea valida. Votato a zero per annullare l'ingiustizia –
Grazie Ivan! Apprezzo il tuo supporto :) –