我有以下 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(使用前将#替换为@)