私は何時間もこれをやろうとしました。私は Fortran コードを持っており、C シャープ プロジェクトでそれを使用したいと考えています。
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 シャープで次のコードを使用しました。
[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);
そして、私はこのエラーを受け取りました
保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。
この関数には、処理方法がわからない 2 つのパラメーターがあります。jd は jd(*) 型で、vp は割り当て可能です。残りは問題ないはずです。これらのパラメーターの種類を処理する方法を知っている人はいますか? ありがとう。