C++的函数代码为:
//得到指定序号的对象名称
//输入参数: nEntityIndex 指定对象的序号(围: 0 - (lmc1_GetEntityCount()-1))
//输出参数: szEntName 对象的名称
typedef int (*LMC1_GETENTITYNAME)(int nEntityIndex,TCHAR szEntName[256]);
由于出现了TCHAR szEntName[256]这个参数,试用了很多方法string[],stringbuild[]都没成功获取到正确的数据。
最后在论坛看到一个这样的答案获取启发:
“如果用这个还是乱码的话你可以先将IntPtr转为Byte
然后将Byte转为String
这样还是乱码的话我估计是你这个数据本来就是编码的,是不是还有一个解码函数?”
差点忘记了byte这个类型了,果然在使用byte[]之后获得正确的数据。
c# 调用代码:
public string GetEntityName(int nEntityIndex)
{
byte[] ObjectName = new byte[256];
LMC1_GETENTITYNAME lmc1_GetEntityName = (LMC1_GETENTITYNAME)dld.Invoke("lmc1_GetEntityName", typeof(LMC1_GETENTITYNAME));
lmc1_GetEntityName(nEntityIndex, ObjectName);
//中文转换:System.Text.Encoding.Unicode.GetString(ObjectName).Replace("\0", null)
return System.Text.Encoding.Default.GetString(ObjectName).Replace("\0", null);
}