外部C DLLからコールバックを受け取るC#インターフェイスを作成しようとしています。 コールバックのパラメータには、C構造体へのポインタが含まれています。これらの構造体自体には、別の構造体へのポインタがあります。C to C#ポインタ付きの構造体を持つPInvoke
コールバック署名:Cで
typedef application_event_result (*application_event_ptr)(abuffertype* read_buffer, abuffertype* write_buffer);
バッファ構造体の定義:
typedef struct {
uint16 size;
uint8* data;
} anotherbuffertype;
typedef struct {
anotherbuffertype *buffer;
uint16 position;
} abuffertype;
Iは、コールバックのC#の署名は、パラメータのポインタ型は、 "REF" を使用すべきであることを知っています。しかし、どのように "abuffertype"構造体の中のポインタをC#で定義することができますか?
これまでのところ私はC#で2つの構造体のこの定義があります
[StructLayout(LayoutKind.Sequential)]
public struct anotherbuffer
{
UInt16 size;
IntPtr data;
}
[StructLayout(LayoutKind.Sequential)]
public struct abuffer
{
anotherbuffer buffer;
UInt16 position;
}
をしかし、それは動作しません。 C#の "abuffer"の内容は、Cコードのコールバックの前にあったものではありません。
内部構造体ポインタを手動でアンマーシャリングする必要がありますか?