对于C#结构体包含中文和c程序交互时乱码的问题,应该在C#的结构体定义时指定字符集
代码
//
// 摘要:
// 用于在结构中出现的内联定长字符数组。与 System.Runtime.InteropServices.UnmanagedType.ByValTStr
// 一起使用的字符类型由应用于包含结构的 System.Runtime.InteropServices.StructLayoutAttribute 的
// System.Runtime.InteropServices.CharSet 参数确定。
// 应始终使用 System.Runtime.InteropServices.MarshalAsAttribute.SizeConst
// 字段来指示数组的大小。
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode), Serializable]
public struct MY_STRUCT
{
public double x; //点的经度坐标
public double y; //点的纬度坐标
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string Name; //Name[40]; //名称
public int PointID; //点的ID号
public int TypeCode; //客户不使用该字段
}
// 摘要:
// 用于在结构中出现的内联定长字符数组。与 System.Runtime.InteropServices.UnmanagedType.ByValTStr
// 一起使用的字符类型由应用于包含结构的 System.Runtime.InteropServices.StructLayoutAttribute 的
// System.Runtime.InteropServices.CharSet 参数确定。
// 应始终使用 System.Runtime.InteropServices.MarshalAsAttribute.SizeConst
// 字段来指示数组的大小。
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode), Serializable]
public struct MY_STRUCT
{
public double x; //点的经度坐标
public double y; //点的纬度坐标
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string Name; //Name[40]; //名称
public int PointID; //点的ID号
public int TypeCode; //客户不使用该字段
}