2010-11-24 21 views
11

Tengo una aplicación que usa LoadLibrary en Windows para cargar plugins dinámicamente. Sin embargo, algunos de los complementos tienen otras DLL dependientes, como las DLL de cliente de base de datos. Cuando intenta cargar un archivo DLL tales y uno de los DLL dependientes no existe se obtiene un cuadro de diálogo de Windows desagradable:.Intentando cargar una DLL en Windows usando LoadLibrary cuando falta una DLL dependiente

"El programa no puede iniciarse porque xxx.ddl no se encuentra en su computadora Intente reinstalar el programa para solucionar este problema ".

¿Hay alguna manera fácil de evitar este diálogo? Esperaba que uno pudiera usar LoadLibraryEx y pasar una bandera que diga "no me des ese diálogo tan molesto", pero no parece ser así.

Lo que me gustaría es que la aplicación maneje ese error, en lugar de que Windows lo maneje para mí, especialmente porque el texto del mensaje es incorrecto (el problema no es que el programa no pueda iniciarse, el el programa se ejecuta con bastante felicidad, simplemente no puede cargar este complemento).

Lo que me gustaría evitar es tener que reescribir los complementos que tienen estas dependencias externas para que ellos mismos realicen una carga dinámica de los módulos dependientes y luego consultar cualquier punto de entrada.

De todos modos, cualquier sugerencia sería gratamente recibida.

+0

'LoadLibraryEx' tiene muchos indicadores. – ruslik

+0

ruslik: LoadLibraryEx puede tener muchos indicadores, pero ninguno, al menos ninguno documentado en MSDN, controla este comportamiento. –

Respuesta

13

Uso SetErrorMode(). Úselo con SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS antes de cargar la DLL y con 0 inmediatamente después.

+1

Eso funcionará. ¡Lo siento por no haber leído la documentación de LoadLibrary! Primera oración de la sección de Comentarios. Doh. –

5

De MSDN:

Para activar o desactivar los mensajes de error mostrados por el cargador durante las cargas DLL, utilice la función SetErrorMode.

Link here

Cuestiones relacionadas