簡體   English   中英

Android上的Marshal.PtrToStructure返回null

[英]Marshal.PtrToStructure on Android return null

我正在使用unity3d進行游戲項目。
現在,我嘗試將Structure從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。

我不知道為什么會有這個結果。
有人可以回答嗎?

C#等效的unsigned charSystem.Byte
C#更改您的數據類型將解決您的問題。
您可以檢查此鏈接以獲取更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM