将非托管结构封送到C(Unity';s mono) 我想了解什么是最好的方法来更新从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); //data.cpp 结构位置{ int x; int-y; } 结构点信息{ 整数计数; Pos positions[10];//理想情况下,我想要向量 } //data.cs [StructLayout(LayoutKind.Sequential)] [系统可序列化] 公共结构Pos{ int X; int-Y; } [StructLayout(LayoutKind.Sequential)] [系统可序列化] 公共结构位置信息{ 整数计数; [Marshallas(UnmanagedType.ByValArray,ArraySubType=UnmanagedType.Struct,SizeConst=10)] 公共Pos职位; } //仅在C侧 公共位置信息pInfo=新位置信息(); pInfo.positions=新位置[10]; //在C#Interop函数中 [DllImport(dllName)] 私有静态外部无效GetPositions(参考位置信息pInfo); 此方法在C++侧(非托管插件)中实现为: extern“C”void接口\u导出 GetPositions(位置信息*pinfo) { pinfo.count=3; 对于(int i=0;i

将非托管结构封送到C(Unity';s mono) 我想了解什么是最好的方法来更新从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); //data.cpp 结构位置{ int x; int-y; } 结构点信息{ 整数计数; Pos positions[10];//理想情况下,我想要向量 } //data.cs [StructLayout(LayoutKind.Sequential)] [系统可序列化] 公共结构Pos{ int X; int-Y; } [StructLayout(LayoutKind.Sequential)] [系统可序列化] 公共结构位置信息{ 整数计数; [Marshallas(UnmanagedType.ByValArray,ArraySubType=UnmanagedType.Struct,SizeConst=10)] 公共Pos职位; } //仅在C侧 公共位置信息pInfo=新位置信息(); pInfo.positions=新位置[10]; //在C#Interop函数中 [DllImport(dllName)] 私有静态外部无效GetPositions(参考位置信息pInfo); 此方法在C++侧(非托管插件)中实现为: extern“C”void接口\u导出 GetPositions(位置信息*pinfo) { pinfo.count=3; 对于(int i=0;i,c++,unity3d,mono,marshalling,C++,Unity3d,Mono,Marshalling,这是行不通的。如果我用Int替换Pos,那么它就工作了。我试图理解从C++中把上面的结构传递给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++插件的最佳方法是什么。
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;
   }
}