0

我正在尝试调用以下 FORTRAN 方法:

subroutine MYMETHOD(THEARRAY)

带参数

CHARACTER*200  :: THEARRAY(2)

这看起来很简单,但我遇到了麻烦,因为它是一个字符数组数组。我已经尝试了几种方法,包括封送处理(由于有多个字符串而遇到问题。)我能想到的最好的方法是:

[DllImport("theFortranDLL.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void MYMETHOD(THEARRAY);

static void Main(string[] args)
{
    StringBuilder[] theArray = new StringBuilder[2];

    theArray[0] = new StringBuilder("DataA",200);
    theArray[1] = new StringBuilder("DataB",200);

    MYMETHOD(theArray);
}

但是,这不起作用。我将如何从 C# 调用这样的方法?谢谢!

4

1 回答 1

1

在 Fortran 中,CHARACTER*200 :: THEARRAY(2)不是数组数组。它是一个长度为 200 的定标器字符串的两元素数组。在其他语言中,它可能是一个数组数组。每个 Fortran 字符串的末尾都用空格填充。我不知道 C# 如何处理字符串... C 以空字符终止字符串。对于 Fortran,该空字符必须用空格替换,一直到位置 200。

于 2013-03-14T06:01:45.257 回答