Cの定義
typedef struct {
const uint8_t* buf;
int bufLen;
} Info;
int Foo(Info* info);
C#の定義
[StructLayout(LayoutKind.Sequential)]
public struct Info
{
// [MarshalAs( ??? )]
public byte[] buf;
int bufLen
}
[DllImport(...)]
public static extern int Foo(ref Info info);
C#構造体定義でMarshalAs
属性に何を指定するかを理解するのに問題があります。byte[] buf
バッファは.NET側に割り当てられ、その長さは呼び出し時にわかります。
簡単な小さなテストで:
var info = new Info {
buf = new byte[] {0x40, 0x50, 0x60, 0x70},
bufLen = 4,
};
Foo(ref info);
すべてが正しく機能しているように見えますが、実際には私のバッファのデータは正しくありません。私が見るDLLからそれを印刷する01 00 80 00
-それが何であるかわからない。
私はもう試した:
- いいえ
MarshalAs
[MarshalAs(UnmanagedType.SafeArray)]
何も機能しません。
一般的に、私はこれらの種類の問題をデバッグするための最良の方法も本当に知りません。