Je suis d'utiliser une DLL Fortran qui contient un type avec la signature suivante (simplifiée):Travailler avec un pointeur contenant le type Fortran de code managé
TYPE MyType
INTEGER(4) :: ii
REAL(8) :: rr
INTEGER(4) :: n_a0
INTEGER(4) :: n_a1
INTEGER(4), POINTER :: a0(:)
REAL(8) , POINTER :: a1(:)
END TYPE
De toute évidence, ce type contient des pointeurs vers des entiers et doubles. J'accède ce type par la méthode suivante à partir d'un autre code Fortran en douceur.
SUBROUTINE MySub(x)
TYPE(MyType) :: x
Mon but est de travailler avec cette MyType
et MySub
par le code C#. Pour ce faire, je définissais une structure dans mon code C# comme suit:
struct MyType
{
public int ii;
public double rr;
public int n_a0;
public int n_a1;
public int[] a0;
public double[] a1;
}
et l'accès avec la méthode suivante:
[DllImport("my_test.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void MySub(ref MyType t);
Le problème est quand MySub
les accès tout les membres non-tableau est OK . Mais quand il essaie d'accéder aux éléments du tableau, je reçois AccessViolationException
. Que dois-je faire pour résoudre ce problème?
J'ai également essayé de changer le type de 'a0' et' a1' en 'IntPtr' et de les allouer en utilisant' Marshal.AllocHGlobal'. Mais j'ai la même exception dans ce cas non plus. – melmi