我正在尝试从C ++到C#编组一个看起来像这样的结构:
typedef struct FooStruct {
Uint8 bytesPerThingie;
void *arrayOfThingies;
// other members ...
}
所以,在这种情况下有两个未知数:
我之前已成功编组了结构本身,其定义如下:
[StructLayout(LayoutKind.Sequential)]
public struct FooStruct {
public byte bytesPerThingie;
public IntPtr arrayOfThingies;
// other members...
}
但现在我需要检查和修改嵌入式数组。
我理解
即使假设在这种情况下数组中的元素是blittable类型,如果在运行时之前我不知道数组的大小,我如何设置SizeConst,一个编译时参数?
答案 0 :(得分:2)
长话短说,你不能。 SizeConst
field上的MarshalAsAttribute
class被编译为字段上的元数据,并且不能在运行时更改(至少,不会以对您有益的方式)。
那就是说,你有以下选择:
Marshal
class上的方法手动编制内容。unsafe
直接访问指针(并更改类型以使用指针)。这需要/unsafe
compiler option,这可能是您的选择,也可能不是。请注意,在上述情况的所有中,您仍然需要知道返回的数组的长度(它可能在结构中以及指针和类型)