你有一个采用字节数组的结构
byte[]
但是,该数组的大小取决于您提交的图像(widthxheight)
那么......你怎么做
[MarshalAs(UnmanagedType.ByValArray, SizeConst = ???)]
public Byte[] ImageData;
当使用从C#传递到C dll的字节数组时,sizeconst是否必须有?
答案 0 :(得分:2)
您需要更改编组类型。如果您作为ByValArray进行编组,则需要SizeConst,而不是其他类型。有关详细信息,请查看UnmanagedType enum。
我怀疑你想要编组作为数组的C指针:
[MarshalAs(UnmanagedType.LPArray)]
这将导致它编组到标准C数组(BYTE *),因此只传递指针。这样做可以传递任何大小的数组。通常,您还希望将数组大小作为另一个参数(或图像宽度/高度/ bpp,它提供相同的信息),因为在C / C ++中无法轻易地说明这一点。