Llamar a una función DLL VB6 con un tipo definido por el usuario (UDT) complejo desde C #

Estoy escribiendo una aplicación C # para llamar a una DLL VB6 de terceros. He agregado referencia a la DLL VB6 en la pestaña Referencias-> COM.

Un método particular en la DLL toma un VB6 UDT (Tipo definido por el usuario) como parámetro.

Este UDT se muestra como una estructura en el contenedor .NET generado automáticamente para COM. La estructura tiene muchos UDT / estructuras secundarias, así como miembros del tipo VBA.Collection (como se muestra en los metadatos .NET). También tiene tipos de datos regulares como string, short, double, int, etc.

Estoy inicializando esta estructura en mi código C # como:

udtEmployee udtEmpData = default(udtEmployee);

También intenté

udtEmpData = new udtEmployee();

Si no lo inicializo usando default o new, no puedo compilar mi código C #, ya que el compilador se queja del uso de la variable no asignada.

Necesito pasar esta estructura como referencia. Lo estoy haciendo así:

clsEmployee.SetData(ref udtEmpData);

Al llamar a este método de la DLL VB6, recibo un error:

Error: intento de leer o escribir memoria protegida. Esto es a menudo una indicación de que otra memoria está corrupta.

¿Cuál es la razón y cuál es la solución?

Tenga en cuenta que no puedo cambiar la DLL VB6 ya que no tengo su código fuente. Estoy usando VS 2005.

EDITAR 1:

Aquí hay un fondo completo:

Existe un producto ERP desarrollado localmente, que admite el desarrollo de complementos utilizando VB6. Tiene un archivo de configuración, que especifica los nombres de las DLL adicionales que se cargarán. Estos complementos se muestran en un menú en la aplicación ERP. Al hacer clic en el menú, el ERP llama a una función con el nombre StartAddOn () que debería estar presente en la DLL VB6.

Quería desarrollar un complemento en C #, así que desarrollé un simple complemento VB6 con un método StartAddOn, que a su vez pasa el control a mi DLL .NET.

La DLL .NET usa las clases de negocio expuestas por el ERP y pasa objetos de datos de aquí para allá. En la DLL .NET, he agregado una referencia COM a la DLL publicada por el proveedor de ERP.

Entonces la arquitectura es así: ERP-> VB6 AddOn con el método StartAddOn ->. NET DLL-> usa COM DLL publicado por el proveedor ERP y sus clases de datos (structs / UDTs).

¿Cómo puedo depurar el error de memoria?

Respuestas a la pregunta(1)

Su respuesta a la pregunta