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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top