如何使用字符*50类型的参数将参数从C#传递到FORTRAN?

如何使用字符*50类型的参数将参数从C#传递到FORTRAN?,c#,fortran,C#,Fortran,我有以下FORTRAN语言: SUBROUTINE MYSUB(MYPARAM) !DEC$ ATTRIBUTES DLLEXPORT::SetPaths CHARACTER*50 MYPARAM WRITE(6, *) MYPARAM END SUBROUTINE 然后我有以下C语言# 然而,在我的FORTRAN中写的东西在“某物”后面显示了一堆垃圾。看起来字符串终止符没有得到尊重。救命啊 字符串是在不同语言之间交换的最棘手的数据类型 基本的Fortran字符串是固

我有以下FORTRAN语言:

  SUBROUTINE MYSUB(MYPARAM)
  !DEC$ ATTRIBUTES DLLEXPORT::SetPaths

  CHARACTER*50 MYPARAM

  WRITE(6, *) MYPARAM

  END SUBROUTINE
然后我有以下C语言#


然而,在我的FORTRAN中写的东西在“某物”后面显示了一堆垃圾。看起来字符串终止符没有得到尊重。救命啊

字符串是在不同语言之间交换的最棘手的数据类型

基本的Fortran字符串是固定长度的,末尾用空格填充。(Fortran现在有可变长度的字符串,但这些字符串更难交换。)提供了内在的“trim”来抑制尾随空格;“len_trim”提供长度较小的尾随坯料

C用空字符标记字符串的结尾

我不知道C如何处理字符串——长度的内部变量??终结者

但是Fortran不会理解C#的表示,它只会看到声明的字符串的完整长度,在本例中包括未初始化的内存。最好的解决方案可能是将字符串的其余部分初始化为C#中的空格

class Program
{
    static void Main(string[] args)
    {
        StringBuilder sb = new StringBuilder(50);
        sb.Append(@"something");
        MYSUB(sb);

        Console.ReadLine();
    }

    [DllImport(@"myCode.dll", EntryPoint = "MYSUB")]
    public static extern void MYSUB(StringBuilder input);

}