Ole*_*lfe 8 c# arrays size marshalling
你有一个采用字节数组的结构
byte[]
Run Code Online (Sandbox Code Playgroud)
但是,该数组的大小取决于您提交的图像(widthxheight)
那么......你好
[MarshalAs(UnmanagedType.ByValArray, SizeConst = ???)]
public Byte[] ImageData;
Run Code Online (Sandbox Code Playgroud)
当使用从C#传递到C dll的字节数组时,sizeconst是否必须有?
您需要更改编组类型。如果您要编组为 ByValArray,但不编组为其他类型,则需要 SizeConst。有关详细信息,请查看UnmanagedType 枚举。
我怀疑您想将其编组为指向数组的 C 指针:
[MarshalAs(UnmanagedType.LPArray)]
Run Code Online (Sandbox Code Playgroud)
这将导致它编组到标准 C 数组 (BYTE*),因此仅传递一个指针。这样做可以让您传递任何大小的数组。通常,您还需要将数组大小作为另一个参数(或图像宽度/高度/bpp,它提供相同的信息)传递,因为在 C/C++ 中无法轻松判断这一点。