2010-02-05 7 views
7

Estoy escribiendo una DLL para conectarla a otra aplicación (de terceros). La DLL necesitará depender de otro conjunto de DLL (por razones de licencia no puedo vincular estáticamente).DLL de complementos que dependen de otras DLL

Me gustaría que mi archivo DLL sea "xcopy-deplorable" en cualquier directorio. También me gustaría no requerir agregar este directorio a la ruta.

Si acabo de construir el archivo DLL de la manera habitual, Windows rechazará cargar el archivo DLL, ya que no puede encontrar los archivos DLL al lado del proceso actual.

¿Hay alguna buena opción para ayudar a Windows a encontrar la DLL?


para responder a algunas preguntas:

  • La DLL está escrito en C++.
  • Las DLL adicionales son QT-dlls.
  • Me gustaría colocar los archivos DLL adicionales en la misma carpeta que mi complemento DLL. Puedo obtener el nombre de esa carpeta en GetModuleFileName.
  • La aplicación es Firefox, la DLL es un módulo de seguridad PKCS # 11.
  • La aplicación carga el archivo DLL utilizando la ruta completa al archivo DLL (el usuario lo proporciona al instalar el complemento).
  • Exigir que las DLL se coloquen en System32 o junto a la aplicación funcionaría, pero es un poco complicado y podría causar problemas con los desinstaladores.
  • LoadLibrary y GetProcAddress por supuesto funcionaría, pero no es realmente factible en mi caso. Estoy usando cientos, si no miles, de métodos en las otras DLL. Realmente necesito usar las bibliotecas de importación.

Había pensado en usar dlls cargados con delay combinados con SetDllDirectory en DllMain. ¿Alguien ha intentado algo como esto?

+1

¿Qué tecnología estás usando? .¿red? –

+0

Su premisa no tiene sentido y está rota. –

+0

Siempre puedes colocar los dlls en la carpeta System32 ... – Kryten

Respuesta

4

Puedo pensar en 3 formas.

  1. poner los archivos DLL en la misma carpeta que su aplicación (no se puede hacer esto?)
  2. Uso de tiempo de ejecución de enlace. LoadLibrary() y GetProcAddress()
  3. Usar un manifiesto http://msdn.microsoft.com/en-us/library/aa374182(VS.85).aspx

Pero si la DLL no está en la misma carpeta que el archivo .exe, ¿cómo vas a saber dónde está? Olvide Windows no saber, ¿cómo usted sabe?

+0

No es 'mi' aplicación, y realmente no me gusta instalarla en la carpeta de 'otras' aplicaciones. La solución manifiesta suena realmente interesante: investigaré eso. ¿Tienes más referencias? –

1

puede especificar la ruta de acceso de dll como parámetro de LoadLibrary().

0

Otra opción es modificar la variable PATH. Tenga un archivo de proceso por lotes para iniciar la aplicación principal, y configure la RUTA =% PATH%;% ~ dp0. Esto garantiza una huella mínima, sin dejar rastros adicionales en el sistema después de la ejecución.

Cuestiones relacionadas