对于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; // 客户不使用该字段
}