我试图了解更新从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 ++插件填充。