如何在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
相关产品推荐
相关产品推荐

