我正在使用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。
我不知道为什么会有这个结果 有人可以回答吗?