gpt4 book ai didi

c# - Android 上的 Marshal.PtrToStructure 返回 null

转载 作者:行者123 更新时间:2023-11-28 05:01:48 27 4
gpt4 key购买 nike

我正在使用 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.zero 的 IntPtr,但 Marshal.PtrToStructure 将返回 null。

我不知道为什么会有这样的结果。
有人可以解答吗?

最佳答案

C#unsigned char 的等价物是 System.Byte
C# 中更改数据类型将解决您的问题。
你可以查看这个link了解更多详情。

关于c# - Android 上的 Marshal.PtrToStructure 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45749360/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com