Calling FORTRAN dll a partir de C # e atribuir valores a matriz de estruturas

Posso passar umC# estrutura emFORTRAN bem. Eu posso até passar uma matriz de umC# struct como uma matriz deTYPE() emFORTRAN. O problema é quando tentei retornar valores paraC#. Aqui está um exemplo

DLL fortran é:

MODULE TESTING

   TYPE VALUEREF
     INTEGER*4 :: A
   ENDTYPE VALUEREF

CONTAINS

   SUBROUTINE TEST_REF(T,N)
   !DEC$ ATTRIBUTES DLLEXPORT :: TEST_REF
   !DEC$ ATTRIBUTES ALIAS:'TEST_REF' :: TEST_REF
   !DEC$ ATTRIBUTES VALUE :: N
   IMPLICIT NONE
     INTEGER*4 :: A,I,N   
     TYPE(VALUEREF) :: T(N)      
     A = 100
     DO I=1,N
        T(I)%A = A + I
     END DO

   END SUBROUTINE
END MODULE

e aC# função de chamada que espera resultados é:

[StructLayout(LayoutKind.Sequential)]
public struct ValueRef
{
    public int a;
}

[DllImport("mathlib.dll")]
static extern void TEST_REF(ValueRef[] t, int n);

void Main()
{
    ValueRef[] T = new ValueRef[4];
    for (int i = 0; i < T.Length; i++)
    {
        T[i].a = i;
    }
    Console.WriteLine("Initialize");
    for (int i = 0; i < T.Length; i++)
    {
        Console.WriteLine("  A={0}", T[i].a);
    }
    Console.WriteLine("Call Fortran");
    TEST_REF(T, T.Length);
    for (int i = 0; i < T.Length; i++)
    {
        Console.WriteLine("  A={0}", T[i].a);
    }
}

Com resultados:

Initialize
  A=0
  A=1
  A=2
  A=3
Call Fortran
  A=0
  A=1
  A=2
  A=3

Depurando o código FORTRAN, vejo os valores iniciais passarem deC# paraFORTRAN bem. Os valores são substituídos por novos valores e o controle é passado de volta paraC# onde os valores antigos ainda estão contidos noValueRef instâncias.

Por que posso passar e retornar uma matriz defloat ouint de maneira semelhante, tudo bem. e posso passar e retornar estruturas singulares comref keyword, e eu posso passar, mas retorno e matriz destruct?

PS. Estou usando o Compaq Visual Fortran 6.5 e .NET 3.5
PS2. Agradeço quaisquer comentários / idéias sobre isso. Estou 95% concluído com o meu projeto e agora encontro esse problema. O objetivo deste projeto é usar estruturas, tanto quanto possível, para reduzir os #of argumentos passados às funções e manter certos aspectos do design do OO

questionAnswers(1)

yourAnswerToTheQuestion