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 *)にマーシャルスルーされるため、ポインターのみが通過します。これを行うと、任意のサイズの配列を渡すことができます。通常、C / C ++にはそれを簡単に伝える方法がないため、配列サイズを別のパラメーター(または同じ情報を提供する画像の幅/高さ/ bpp)として渡すこともできます。

于 2009-08-06T16:44:15.413 に答える