La memoria no se pudo “leer” error al abrir un formulario desde una aplicación VB6 .Net

StackOverflow https://stackoverflow.com/questions/399295

Pregunta

Tengo una aplicación escrita en C # .Net (Framework 2.0 si importa). Se invoca a un exe VB6 que expone una clase COM con un método -. Que muestra una forma

Cuando el formulario VB está cerrado, me sale un error del sistema (mensaje de Windows): La ubicación de memoria no se puede leer. A continuación, Windows Me pregunta si se debe cerrar la aplicación o depurarlo. Realmente no importa lo que yo quiero, ya que no son depuradores instalados en la máquina de prueba y cuando selecciono depuración que me da un mensaje que tendrá que cerrar.

El error sólo ocurre en dos condiciones (ambos deben aplicar):

  • Cuando se ejecuta en Windows 2000.
  • También, esto sólo sucede si hago clic en el "Informe de visualización" primer botón, que llama a otro DLL COM - informes de Crystal -. Para generar un informe

Básicamente, el flujo es la siguiente:

    C#.Net application
     |-- MDI Form
          |   When clicking a button on the form, the VB6 method is called
          +-- showing the form. setParent(VBForm.Handle, DotNetForm.Handle) is called
          |   and the form is shown. The called method returns (there is no return value)
          |    |
          |    +-- When clicking "Display report", crystal reports is used to generate a report and show it to the user
          |    |
          |    \-- When Exit button is clicked, form is closed - this is where the error occures
          |
          \-- .Net form keeps on living long after that inner form is closed

¿Alguien sabe lo que podría causar un error de este tipo? La VB tiene una línea On Error Goto que rodea todo el método principal, que debe capturar cualquier error en VB - pero no es así. El error, sin embargo, vienen del archivo EXE generada VB.

¿Fue útil?

Solución

Se puede confirmar qué módulo dentro del exe VB está fallando uniendo un depurador no administrado y ver lo que el seguimiento de la pila es.

Crystal Reports suena como una causa más probable, pero es posible que algo más está provocando el problema. Suponiendo que haya acceso al código VB me gustaría comprobar que todos los objetos de Crystal Report COM están siendo liberados correctamente. Si algo se está quedando alrededor, entonces podría ser mal interactuar con el apagado de la aplicación.

Si desea una solución realmente hacker podría considerar llamar a la función Win32 TerminateProcess dentro del evento OnClose. Esto terminará el proceso sin informar cualquier DLL adjuntos ... no es bonito y puede conducir a colgando conexiones a bases de datos, etc., que tendrá que limpiar a sí mismos (probablemente en el tiempo de espera).

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