バイト配列を取る構造があります
byte[]
ただし、その配列のサイズは、送信する画像 (幅 x 高さ) によって異なります。
じゃあ…どうしよう
[MarshalAs(UnmanagedType.ByValArray, SizeConst = ???)]
public Byte[] ImageData;
C# から C dll に渡されるバイト配列を操作する場合、sizeconst は必須ですか?
バイト配列を取る構造があります
byte[]
ただし、その配列のサイズは、送信する画像 (幅 x 高さ) によって異なります。
じゃあ…どうしよう
[MarshalAs(UnmanagedType.ByValArray, SizeConst = ???)]
public Byte[] ImageData;
C# から C dll に渡されるバイト配列を操作する場合、sizeconst は必須ですか?
マーシャリングの種類を変更する必要があります。ByValArrayとしてマーシャリングする場合は、SizeConstが必要ですが、他のタイプでは必要ありません。詳細については、UnmanagedType列挙型を参照してください。
私の疑いは、配列へのCポインターとしてマーシャルしたいということです。
[MarshalAs(UnmanagedType.LPArray)]
これにより、標準のC配列(BYTE *)にマーシャルスルーされるため、ポインターのみが通過します。これを行うと、任意のサイズの配列を渡すことができます。通常、C / C ++にはそれを簡単に伝える方法がないため、配列サイズを別のパラメーター(または同じ情報を提供する画像の幅/高さ/ bpp)として渡すこともできます。