You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中编写等价于FORTRAN CHARACTER的变量声明?

C#中对应Fortran character(len=255) :: herrA 的等价声明

Fortran里的character (len=255) :: herrA是固定长度255字节的字符缓冲区,用于从REFPROP DLL接收错误信息。在C#中与该DLL交互时,有两种常用的等价声明方式:

方式1:使用StringBuilder(推荐)

StringBuilder是C#传递可修改字符串到非托管代码的标准类型,需预先分配足够容量匹配Fortran的长度:

StringBuilder herrA = new StringBuilder(255);

在P/Invoke的DLL导入声明中,需指定字符串的非托管类型(REFPROP默认用ASCII编码,对应LPStr):

[DllImport("REFPROP.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void YourRefPropFunction([MarshalAs(UnmanagedType.LPStr)] StringBuilder herrA);

方式2:使用固定长度字符数组

如果需要严格匹配Fortran的内存布局,可以直接声明固定长度的char数组:

char[] herrA = new char[255];

对应的P/Invoke声明需标注固定长度字符串的属性:

[DllImport("REFPROP.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void YourRefPropFunction([MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)] char[] herrA);

关键注意点

  • REFPROP采用ASCII编码,优先选择LPStr(对应StringBuilder)或ByValTStr搭配char数组,避免编码不匹配导致乱码。
  • 调用DLL前必须保证缓冲区的容量/长度严格等于255,否则可能触发内存访问错误或信息截断。

内容的提问来源于stack exchange,提问作者Spratt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:30:47