Pregunta

Tenemos una aplicación .Net desde la cual un C ++ se crean instancias componente COM. Cargamos el componente COM desde una ventana del formulario secundario. Hay un recurso común que está siendo editado por la aplicación .Net, que inturn está siendo utilizado por el archivo DLL COM para poner en marcha.

Cuando la siguiente secuencia de pasos se llevan a cabo:
1. componente COM Instantiate en la nueva ventana secundaria    El componente COM se crea una instancia, y es utilizado por el formulario secundario, y después de ser utilizado, se establece en NULL, con la esperanza de que el componente COM se descargó.
2. Mantener ventana secundaria abierta, y luego editar el recurso
3. Ahora, ve a "refrescar" la forma, para crear una nueva instancia COM, para ver la refelection del recurso cambiado -., Pero el recurso no se actualiza

También utilizamos el método Marshal.ReleaseComObject, pero sin éxito. Por favor aconséjame.

No hay solución correcta

Otros consejos

Una vez que un DLL se carga en un .Net dominio de aplicación, no es possble para forzar un DLL para ser descargado. Es una limitación desafortunada del CLR. Si es absolutamente necesario el DLL para descargar se puede hacer lo siguiente.

  1. Crear un nuevo dominio de aplicación
  2. Cargar el archivo DLL en el nuevo archivo DLL
  3. Hacer el trabajo en el nuevo dominio de aplicación
  4. Descargue el nuevo dominio de aplicación

Si un DLL sólo se carga en un dominio de aplicación, descargando el dominio de aplicación se descargará el archivo DLL también. Así que esto hará que la DLL descargado. Sin embargo, es una respuesta bastante pesado.

objeto COM y DLL son dos cosas diferentes, incluso si se reside en otro. Ciertos cortes son posibles, pero mucho mejor solución es volver a escribir esta parte de una manera más sensata que no se basa en la descarga de DLL.

discusión en la página clrInterop describe muy cerca de lo que se indica en su pregunta. El recolector de basura no se descarga el archivo DLL nativo. Cito: ". Podría ser muy peligroso para CLR para hacer esto porque puede haber otro tipo de código (incluso código nativo) que depende de esa DLL Si lo hace asegurar que DLL no se usa más, llamar la API de Windows, como FreeLibrary puede se forma más fácil de descargar la DLL ".

Por lo que usted necesita para INTEROP FreeLibrary y usarlo para descargar el archivo DLL nativo. Aunque debo añadir:. Hacer si no puede tratar de encontrar una solución en la que no es necesario descargar la DLL

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