9

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

byte[]

但是,该数组的大小取决于您提交的图像(宽度x高度)

所以……你怎么办

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

处理从 C# 传递到 C dll 的字节数组时,sizeconst 是必须具备的吗?

4

1 回答 1

3

您需要更改编组类型。如果您作为 ByValArray 编组,则需要 SizeConst,但对于其他类型则不需要。有关详细信息,请查看UnmanagedType 枚举

我的怀疑是您想编组为指向数组的 C 指针:

[MarshalAs(UnmanagedType.LPArray)]

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

于 2009-08-06T16:44:15.413 回答