如何将结构数组从c ++传递给c#?

我通过这种方式将结构从c ++传递给c#:

声明c ++结构:

typedef struct _OrderUpdate { int32_t instrumentId; /* other fields */ } OrderUpdate; 

声明c#struct:

 public struct OrderUpdate2 { public int instrumentId; /* other fields */ } 

在c ++中声明回调:

 typedef void (__stdcall * OrderUpdateCallback)(OrderUpdate*); __declspec(dllexport) void InitializeCallback(long orderUpdateCallbackAddress) OrderUpdateCallback orderUpdateCallback = (OrderUpdateCallback) orderUpdateCallbackAddress; 

并使用它:

 OrderUpdate curOrderUpdate; orderUpdateCallback(&curOrderUpdate); 

在c#初始化回调和进程中:

 [DllImport("NativeAdapter.dll"), SuppressUnmanagedCodeSecurity] public static extern void InitializeCallback( [MarshalAs(UnmanagedType.FunctionPtr)] OrderUpdateCallback ordersUpdateCallbackPointer) [UnmanagedFunctionPointer(CallingConvention.StdCall)] public delegate void OrderUpdateCallback(ref OrderUpdate2 value); OrderUpdateCallback orderUpdateCallback = delegate(ref OrderUpdate2 value) { // do work }; InitializeCallback(orderUpdateCallback); 

一切正常。 但现在我想传递结构数组,即不是OrderUpdate而是OrderUpdate[] 。 我怎样才能做到这一点? 请问c ++数组“映射”c#数组的方式与c ++结构映射c#结构的方式相同吗? 我应该手动传递数组长度还是可以计算? 我该如何更新我的function?

可能我只能以某种方式传递void*然后我可以花费前4个字节用于数组大小和下一个大小* sizeof(OrderUpdate)字节用于数据?

谢谢!

upd:另一个单独的问题 – 即使在最简单的情况下我也不知道如何映射数组。 我无法映射基元数组。 例如,有这样的c ++结构:

 struct orders { signed long long replID; // i8 signed long long replRev; // i8 signed long long replAct; // i8 signed long long id_ord; // i8 signed int status; // i4 signed char action; // i1 signed int isin_id; // i4 signed char dir; // i1 char price[11]; // d16.5 signed int amount; // i4 signed int amount_rest; // i4 signed long long id_ord1; // i8 signed int init_amount; // i4 }; 

我怎样才能将它映射到c#,我试过了:

 public struct Orders { public long replID; // i8 public long replRev; // i8 public long replAct; // i8 public long id_ord; // i8 public int status; // i4 public char action; // i1 public int isin_id; // i4 public char dir; // i1 public char price[11]; // d16.5 // compile error public int amount; // i4 public int amount_rest; // i4 public long id_ord1; // i8 public int init_amount; // i4 } 

但我无法在c#中声明固定大小的数组。