Tengo una aplicación existente que P/invoca a una DLL que reside en el mismo directorio que la propia aplicación.Ruta de búsqueda DLL dinámica de P/Invoke
Ahora (debido a que Canon produce una de las API más complicadas), necesito admitir dos versiones de esta API y determinar en tiempo de ejecución cuál debo usar (antigua o nueva). Dado que los archivos DLL tienen el mismo nombre (el primero carga otros archivos DLL con los mismos nombres, así que el cambio de nombre del primero no me ayudará). Debo guardarlos en directorios diferentes.
De ahí mi pregunta: ¿qué opciones tengo para controlar qué directorio utiliza la DLL dada en una declaración DllImport?
creo que puedo empezar por intentar cualquiera de estas dos ideas:
1) el uso "SetDllDirectory" para establecer mi directorio deseado antes de hacer el primer P/Invoke y luego reiniciarlo después.
2) Cargue la DLL deseada manualmente usando "LoadLibraryEx" y espero que eso sea suficiente.
¿Pero hay algo más ".NET: ish way" para probar primero?
ACTUALIZACIÓN: Me doy cuenta de que puedo rellenar todo el acceso a los archivos DLL en dos ensamblados .Net separados y luego colocar cada uno de ellos en un directorio separado con los archivos API correspondientes. Luego puedo cargar el ensamblado .Net apropiado dinámicamente y la carga de la DLL correcta ocurrirá automáticamente. ¿Alguna razón que no debería funcionar?
Puedo pensar en una: ¿cómo voy a depurar esto? ¿Es posible decirle a Visual Studio que un ensamblado (contenido en mi solución) se colocará en un subdirectorio y se depurará desde allí?
Por el momento, le doy un +1 por sus condolencias, realmente lo necesitaba, habiendo estado expuesto a sus API varias veces durante los últimos seis años con desastres cada vez ... –