Instalación impropia: matriz de C # a una matriz no administrada de C ++

Tengo el siguiente código C # con una definición de estructura (CInput), definición obj e init, y una llamada a una función DLL C ++ (nativa) (que también he escrito yo).

//C# code

 public struct CInput
 {

  [MarshalAsAttribute(UnmanagedType.R8)] 
  public double Time;

  [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_R8)]
  public double[] Database;

  /* other similar fields*/

}     

CInput Inputs = new CInput();

/* init of Inputs fields*/

int bfr = Example(ref Inputs); //'Example' being the C++ DLL call

Messagebox.Show(bfr.ToString());

Hay un error en la clasificación del segundo parámetro, no sé dónde. Luego

//C++ code

struct CInput {

  double Time;                       
  double Database[3650];     
  /*etc*/   
}

int Example(CInput& ObjIn) {

    return ObjIn.Database[0];        // just an example
}

Si no tengo cuidado y especifico solo "SafeArray" en el cálculo de la base de datos, aparece un 'error en la lectura / escritura de la memoria, probablemente corrupto', etc.

if "Base de datos" se calculó ya que ByValArray todo está bien, los valores se muestran correctamente. Desafortunadamente, recibo una excepción de tamaño interno porque tengo muchas matrices de ese tamaño, por lo tanto, tengo que buscar punteros, pero cualquier cosa con "SizeArray" traerá los siguientes resultados (con el código recién publicado):

(de C ++):

Database[0] = **0**

Database[1..etc] = values of the next parameters in the struct marshaled with ByValArray.

Creo que debería mencionar que necesito la misma estructura idéntica de C # a C ++, no estoy buscando nada lujoso. Entonces, Array en una estructura >>> Array en una estructura.

NINGUN conocimiento en referencia a esto sería de gran valor. He estado buscando durante horas y todavía no tengo una solución.

Muchas gracias de antemano

Respuestas a la pregunta(2)

Su respuesta a la pregunta