这个问题是Marshalling C# structure to C++ Using StructureToPtr的后续问题。 我有以下结构:
[StructLayout(LayoutKind.Explicit, Size = 120, CharSet = CharSet.Unicode)]
public unsafe struct DynamicState
{
[FieldOffset(0)]
public fixed double Position[3];
[FieldOffset(24)]
public fixed double Velocity[3];
[FieldOffset(48)]
public fixed double Acceleration[3];
[FieldOffset(72)]
public fixed double Attitude[3];
[FieldOffset(96)]
public fixed double AngularVelocity[3];
}
如果我尝试初始化这样的数组:
var dynamicState = new DynamicState();
double[] array = new double[] { 1, 2, 3 };
fixed (double* pArray = array)
{
dynamicState.Acceleration = pArray;
}
我收到以下错误:The left-hand side of an assignment must be a variable, property or indexer
。
初始化作为结构一部分的不安全数组的正确方法是什么?
答案 0 :(得分:2)
这个简单的方法似乎工作:
for (int i = 0; i < 3; i++)
{
dynamicState.AngularVelocity[i] = array[i];
}
虽然可能不是你想要的。这是一个性能关键的代码吗?
这可能更好:
Marshal.Copy(array, 0, new IntPtr(dynamicState.AngularVelocity), array.Length);
我不能说我对非托管代码有很多经验,但至少值得关注这些选项...