我正在將C代碼移植到C#,並且我有一些疑惑。將C結構移植到C#
考慮這樣的結構:
typedef struct
{
uint32_t w;
uint32_t h;
uint32_t f_cc;
uint32_t st;
unsigned char *pl[4];
int32_t strd[4];
void (*done)(void *thisobj);
void *e_cc;
uint32_t rsrvd2;
uint32_t rsrvd3;
} f_tt;
我已經做到了這一點,它不工作(可能是因爲它是錯的: - /):
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct f_tt
{
public uint w;
public uint h;
public uint f_cc;
public uint st;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public Byte[] pl;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public int[] strd;
public delegate void done(IntPtr thisobj);
public delegate void e_cc();
public uint rsrvd2;
public uint rsrvd3;
}
有人能告訴我如何做到這一點我知道了#?
void (*done)(void *thisobj);
void *e_cc;
謝謝!
如果它沒有涉及到指針,你應該在大多數情況下使用'IntPtr'。 –
你可以給出一些關於'pl'中'byte *'的語義是什麼的信息嗎?特別是如果它們指向單個字節,則空終止字符串,某個固定大小的數組...,...哼。猜猜這些是每個顏色分量的4個指針 – CodesInChaos