Unity c#和c ++ struct Mapping

时间:2018-04-04 09:12:52

标签: c# c++ unity3d

我正在使用Unity 2017,在我的项目中,我使用c ++ dll文件来定义我的用户信息结构,如:

c++ :
struct UserInfo
{ 
  int  userID;
  int  loginID;
  char username[32];
  char signature[128];
  long long goldNum;
  int deskID;
}

虽然我在c#中定义了一个结构,如:

C#:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct UserInfo
{
  System.Int32 userID;
  System.Int32 loginID;
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
  public string username;
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
  public string signature;
  public System.Int64 goldNum;
  System.Int32 deskID;
}

最后,我无法获得正确的用户名字符串,它是空的。

当我改变"公共字符串用户名"到" public byte [] username"它工作正常。

如何获取字符串数据而不是byte []数据,因为我需要将字符串更改为lua文件?

感谢您的帮助!

1 个答案:

答案 0 :(得分:-1)

免责声明:我没有在C ++和C#之间进行转换的经验。

那就是说,我相信系统并不直接知道如何将char数组转换为字符串。

但是,您可以使用此方法将至少一个C#char数组转换为C#字符串。也许它也适用于语言之间。

char[] charArray = {'1', '2', '3'};
string s = new string(charArray);

所以也许尝试将c ++ char数组存储在C#char数组中,然后将其转换为字符串。

如果有效,请告诉我: - )