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

2023-12-27

我有以下 FORTRAN:

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

  CHARACTER*50 MYPARAM

  WRITE(6, *) MYPARAM

  END SUBROUTINE

然后我在 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);

}

然而,我的 FORTRAN 中的 WRITE 在“某事”之后显示了一堆垃圾。看起来字符串终止符没有被遵守。帮助!


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

基本的 Fortran 字符串是固定长度的,末尾用空格填充。 (Fortran 现在有可变长度的字符串,但这些字符串很难互换。)提供内在的“trim”来抑制尾随空格; “len_trim”提供减去尾随空白的长度。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 CHARACTER*50 类型的参数将参数从 C# 传递到 FORTRAN? 的相关文章

随机推荐