Android上的Marshal.PtrToStructure返回null

时间:2017-08-18 05:50:18

标签: c# android c++ unity3d

我正在使用unity3d开展游戏项目 现在我尝试将C ++中的结构传递给C# c ++中的结构如下所示:

#pragma pack(push)
#pragma pack(1)
class BuildData  
{  
public:
  int m_ID;   
  int m_BuildType;   
  int m_NameID;  
  int m_DescriptionID;  
  int m_BuildLV; 
  int m_Group;    
  unsigned char m_OpenFlag;   
  unsigned char m_ShowFlag;  
  float m_UIDisplaySize;    
};
#pragma pack(pop)

在unity3d c#项目中,我声明了这样的结构。

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct BuildData
{
  public int m_ID;                  
  public int m_BuildType;           
  public int m_NameID;              
  public int m_DescriptionID;       
  public int m_BuildLV;             
  public int m_Group;         
  [MarshalAs(UnmanagedType.U1)]     
  public bool m_OpenFlag;    
  [MarshalAs(UnmanagedType.U1)]         
  public bool m_ShowFlag; 
  [MarshalAs(UnmanagedType.R4)]  
  public float m_UIDisplaySize;     
};

我使用下面的代码获取数据。

System.IntPtr ptr = MethodToGetIntPtr();   
BuildData convert_data = (BuildData)Marshal.PtrToStructure(ptr, typeof(BuildData));

它在PC和Android x86上运行良好,但在android armeabi上,它失败了 我得到的IntPtr不等于IntPtr.zero但Marshal.PtrToStructure将返回null。

我不知道为什么会有这个结果 有人可以回答吗?

1 个答案:

答案 0 :(得分:1)

unsigned charC#的等效值为System.ByteC#中更改数据类型将解决您的问题 您可以查看此link了解详情。