我想創建一個C#接口從外部C DLL接收回調。 回調的參數包含指向C結構的指針,它們本身具有指向不同結構的指針。C到C#PInvoke與指針結構
回調簽名:
typedef application_event_result (*application_event_ptr)(abuffertype* read_buffer, abuffertype* write_buffer);
C語言中的緩衝結構的定義:
typedef struct {
uint16 size;
uint8* data;
} anotherbuffertype;
typedef struct {
anotherbuffertype *buffer;
uint16 position;
} abuffertype;
我知道,回調的C#簽名應該使用「參考」爲指針類型的參數。但是,如何在C#中定義「abuffertype」結構中的指針呢?
到目前爲止,我有在C#中的兩個結構的定義是:
[StructLayout(LayoutKind.Sequential)]
public struct anotherbuffer
{
UInt16 size;
IntPtr data;
}
[StructLayout(LayoutKind.Sequential)]
public struct abuffer
{
anotherbuffer buffer;
UInt16 position;
}
但是,這並不工作。 C#中「abuffer」的內容並不是C代碼中回調之前的內容。
我是否需要手動解組內部指針,如果是這樣,如何?