编组未知的数组大小

时间:2009-08-06 16:30:34

标签: c# arrays size marshalling

你有一个采用字节数组的结构

byte[]

但是,该数组的大小取决于您提交的图像(widthxheight)

那么......你怎么做

[MarshalAs(UnmanagedType.ByValArray, SizeConst = ???)]
public Byte[] ImageData;

当使用从C#传递到C dll的字节数组时,sizeconst是否必须有?

1 个答案:

答案 0 :(得分:2)

您需要更改编组类型。如果您作为ByValArray进行编组,则需要SizeConst,而不是其他类型。有关详细信息,请查看UnmanagedType enum

我怀疑你想要编组作为数组的C指针:

[MarshalAs(UnmanagedType.LPArray)]

这将导致它编组到标准C数组(BYTE *),因此只传递指针。这样做可以传递任何大小的数组。通常,您还希望将数组大小作为另一个参数(或图像宽度/高度/ bpp,它提供相同的信息),因为在C / C ++中无法轻易地说明这一点。