我已经尝试了几个小时。我有 Fortran 代码,想在我的 c sharp 项目中使用它。
subroutine lean(nx,nlam,flmin,
ulam,thr,isd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr)
real x(no,ni),y(no),w(no),vp(ni),ca(nx,nlam),cl(2,ni)
real ulam(nlam),a0(nlam),rsq(nlam),alm(nlam)
integer jd(*),ia(nx),nin(nlam)
real, dimension (:), allocatable :: vq;
...
我在我的 c sharp 中使用了以下代码来导入这个子例程。
[DllImport("lean.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void lean_(
ref int nx,
ref int nlam,
ref float flmin,
ref float[] ulam,
ref float thr,
ref int isd,
ref int intr,
ref int maxit,
ref int lmu,
[In,Out] ref float[] a0,
[In,Out] ref float[,] ca,
[In,Out] ref int[] ia,
[In,Out] ref int[] nin,
[In,Out] ref float[] rsq,
[In,Out] ref float[] alm,
ref int nlp,
ref int jerr);
我得到了这个错误
尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
在这个函数中,有两个我不知道如何处理的参数,jd 是 jd(*) 类型,而 vp 是可分配的。其余的应该没问题。任何人都知道如何处理这些参数类型?谢谢。