C# 从C向Fortran传递字符数组数组#
我正在尝试调用以下FORTRAN方法:C# 从C向Fortran传递字符数组数组#,c#,interop,fortran,character,marshalling,C#,Interop,Fortran,Character,Marshalling,我正在尝试调用以下FORTRAN方法: subroutine MYMETHOD(THEARRAY) 带参数 CHARACTER*200 :: THEARRAY(2) 这看起来很简单,但我遇到了麻烦,因为它是一个字符数组数组。我尝试过几种方法,包括封送(由于存在多个字符串,因此会出现问题)。我能想到的最好方法是: [DllImport("theFortranDLL.dll", CallingConvention = CallingConvention.Cdecl)] static exter
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#调用这样的方法?谢谢 在Fortran中,
CHARACTER*200::数组(2)
不是数组的数组。它是长度为200的定标器字符串的两元素数组。在其他语言中,它可能是数组的数组。每个Fortran字符串的末尾都用空格填充。我不知道C#如何处理字符串。。。C用空字符终止字符串。对于Fortran,该空字符必须替换为空格,一直到位置200。您尝试过一个包含400个字符的StringBuilder吗?只是尝试过而已。我运行它的程序产生的输出与这里的代码相同。我的代码确实在运行,但当数据进来时FORTRAN会抱怨。我认为数据是以FORTRAN不期望的形式到达的。您是否尝试传递string而不是StringBuilder?也尝试过。不走运):我试过string[],string本身,StringBuilder[],StringBuilder本身,还有一些带有string[]的引用,等等。我的代码看起来正确吗?如果是这样,我可能找错人了。我目前无法访问FORTRAN的源代码,因此C代码可能是正确的。方法正在调用:它进入FORTRAN代码,FORTRAN正在打印一个特定于程序的警告,提示传入的数据不是它所期望的。