Marshal Unmanaged struct to C#(Unity的单声道)

时间:2017-03-07 03:23:36

标签: c++ unity3d mono marshalling

我试图了解更新从C#传递到C ++的结构以进行修改的最佳方法是什么。以下代码显示了我的意图。 我有c ++侧面结构如下:

    // data.cpp
    struct Pos {
     int x;
     int y;
    }

    struct PointInfo {
     int count;
     Pos positions[10];   // Ideally I wanted vector<Pos> 
    }


    // data.cs
    [StructLayout (LayoutKind.Sequential)]
    [System.Serializable]
    public struct Pos {
     int X;
     int Y;
    }

    [StructLayout (LayoutKind.Sequential)]
    [System.Serializable]
    public struct PositionInfo {
     int count;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 10)]
     public Pos positions;
   }


   // In C# side only
   public PositionInfo pInfo = new PositionInfo();
   pInfo.positions = new Pos[10];


  // In C# Interop function
  [DllImport (dllName)]
  private static extern void GetPositions(ref PositionInfo pInfo);

此方法在c ++端(非托管插件)中实现为:

extern "C" void INTERFACE_EXPORT
    GetPositions(PositionInfo* pinfo)
{
   pinfo.count = 3;
   for (int i = 0; i < 3; ++i) {
    pinfo.pos[i].x = i*2;
    pinfo.pos[i].y = i*4;
   }
}

这不起作用。如果我用Int替换Pos,那么它可以工作。我试图理解从C#传递上述结构的最佳方法是用C ++插件填充。

0 个答案:

没有答案
相关问题