Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C向Fortran传递字符数组数组#_C#_Interop_Fortran_Character_Marshalling - Fatal编程技术网

C# 从C向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

我正在尝试调用以下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#调用这样的方法?谢谢

在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正在打印一个特定于程序的警告,提示传入的数据不是它所期望的。