含有指針我使用含有與以下簽名類型一個Fortran DLL一個Fortran類型工作(簡化):與來自託管代碼
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
顯然,這種類型的包含指向整數和雙精度。我通過以下方法順暢地從另一個Fortran代碼訪問此類型。
SUBROUTINE MySub(x)
TYPE(MyType) :: x
我的目標是通過C#代碼與MyType
和MySub
工作。要做到這一點,我在我的C#代碼定義的結構如下:
struct MyType
{
public int ii;
public double rr;
public int n_a0;
public int n_a1;
public int[] a0;
public double[] a1;
}
,並用下面的方法訪問它:
[DllImport("my_test.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void MySub(ref MyType t);
問題是當MySub
訪問非陣列成員一切正常。但是當它試圖訪問數組元素時,我得到了AccessViolationException
。我該怎麼做才能解決這個問題?
我也嘗試將'a0'和'a1'的類型改爲'IntPtr'並使用'Marshal.AllocHGlobal'分配它們。但是在這種情況下我也得到了同樣的例外。 – melmi