La determinación de la existencia de DLL antes de usarlo
-
20-09-2019 - |
Pregunta
Uso de Visual C ++ 2008 Express Edition. Estoy vincular mi solicitud con una biblioteca de importación (.lib
) para un archivo DLL que podrían o no estar presente en el sistema de destino. Antes de preguntar:. No puedo distribuir el DLL con mi solicitud
Si el archivo DLL no está presente, tan pronto como lo llamo una función de la DLL (pero no antes!), Aparece un mensaje como
Esta aplicación no pudo iniciar porque no se encontró SomeLibrary.dll. La reinstalación de la aplicación puede solucionar este problema.
Lo que quiero que suceda en cambio, es que la aplicación detecte que la DLL no está allí, y simplemente deshabilita la funcionalidad que depende de él. Podría hacer una llamada a LoadLibrary
y ver si tuvo éxito, pero no estoy seguro de si esto es suficiente. Tal vez la biblioteca de importación hace más trabajo detrás de las escenas?
¿Es suficiente una simple llamada LoadLibrary
? Si no, ¿qué más debo hacer? ¿Puede esto incluso puede hacer?
Actualizar : Por supuesto que puedo utilizar LoadLibrary
, y luego GetProcAddress
para cada una de las funciones que desee utilizar. Pero eso es una molestia, y yo tenía la esperanza de evitar eso y sólo tiene que utilizar la biblioteca de importación previsto en su lugar.
Solución
Esto es lo que la opción del vinculador delayload es para, pero no sé si la edición Express es compatible con ella.
Otros consejos
No, LoadLibrary()
es exactamente lo que quiere. La única consecuencia de su uso es la molestia de crear los punteros de función en el DLL cuando se carga correctamente el archivo DLL, pero el proceso para que sea bien cubierto en otro lugar en la red.
Si ir a ver aquí ( MSDN), verá que cuando LoadLibrary
falla de carga, la función devuelve un valor NULL, e incluso se puede comprobar el error específico (que debe ser un archivo no encontrado) utilizando la función GetLastError
.