2009-10-19 15 views
9

Tengo un dll producido por un tercero que tiene algún tipo de estructura de datos interna que limita su tamaño a elementos X.Cargar copias múltiples de dll en el mismo proceso

Básicamente, tiene una cola con X como límite.

Ahora, por lo que he sabido, las DLL son por proceso, pero ¿es posible cargar una DLL más de una vez? Tal vez por hilo? Cª#? o en C++/CLI?

Estoy intentando cargar un C++ dll nativo.

Respuesta

5

La única manera de hacerlo es tener varias copias de la misma dll, y luego cargarlas dinámicamente.

7

Desafortunadamente, el núcleo NT DLL loader routines no expone una interfaz pública para omitir el conjunto de archivos DLL ya cargados. Como tal, uno se queda con sólo unas pocas opciones:

  • Copiar, hardlink, enlace simbólico, y/o el uso de los puntos de análisis para engañar el cargador en el pensamiento tiene varias DLL distintos.
  • Utilice procesos múltiples y cargue una DLL por proceso.
  • Escribir un nuevo cargador de DLL (mucho no para los débiles de corazón!)
  • Convencer proveedor de la DLL para solucionarlo (probable que sea más difícil que escribir un cargador de DLL :)
+2

Tenga en cuenta que las opciones 1 y 3 pueden romperse si el DLL asume que se carga solo una vez por proceso (una suposición bastante razonable). Los DLL COM pueden ser excepcionalmente vulnerables, ya que ambas copias podrían reclamar el mismo GUID/interfaz. – MSalters

Cuestiones relacionadas