0
私は、次のDLLIMPORT文を使用して、FortranのDLLに配列を渡すしようとしていますDLLImportを使用してプロセス内でマングリングさせずに、配列をFortran DLLに渡す方法はありますか?
[DllImport("MyFortranDLL.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
static extern void sDTransposeSTDCALL(ref int n1, ref int n2, [In]double[,] doubles, [Out]double[,] aTransposed);
私は次の配列
を渡すと、それはこのpublic double[,] TransposeStd(double[,] a)
{
int n1 = a.GetLength(0);
int n2 = a.GetLength(1);
double[,] aTransposed = new double[n2, n1];
sDTransposeSTDCALL(ref n1, ref n2, a, aTransposed);
return aTransposed;
}
のように見えます呼び出す私のC#コード
var a = new double[,] { { 11, 12 }, { 21, 22 }, { 31, 32 } };
私はfortran DLLに配列を解釈するものをテキストファイルとして出力し、これを出力します。
A(1, 1) = 11.000
A(1, 2) = 22.000
A(2, 1) = 12.000
A(2, 2) = 31.000
A(3, 1) = 21.000
A(3, 2) = 32.000
ただし、これらの数字は切り替えられた位置にあります。たとえば、A(1,2)
は、22ではなく12に等しくなければなりません。
ここでは何が起こっているのですか?
数字は切り替えられた位置にあります。つまり、A(1,2)は12でなく22でなければなりません。 – PlTaylor
'A(1,2)'は、形状[ 2]。 – francescalus
私はあなたのFortranコード –