[英]Marshalling complex structs to C#
我有一个复杂的结构,我想编组它以在C#中使用它。 我得到了“ FILE”结构作为示例
#pragma pack(4)
typedef struct __file__{
short token; /* Used for validity checking */
unsigned short flags; /* File status flags */
unsigned char hold; /* Ungetc char if no buffer */
int fd; /* File descriptor */
int level; /* fill/empty level of buffer */
int bsize; /* Buffer size */
unsigned char *buffer; /* Data transfer buffer */
unsigned char *curp; /* Current active pointer */
struct __file2{
char *name; /* filename */
enum {
__or_unspecified,
__or_narrow,
__or_wide
} orient; /* stream orientation */
int mbstate[2]; /* space for mbstate_t structure */
} *extended;
} FILE; /* This is the FILE object */
#pragma pack()
那么,如何将这个结构转换为C#?
我的实际转换是这样的:
[StructLayout(LayoutKind.Sequential, Pack = 4)]
struct FILE
{
public short token;
public ushort flags;
public byte hold;
public int fd;
public int level;
public int bsize;
public UIntPtr buffer;
public UIntPtr curp;
[StructLayout(LayoutKind.Sequential)]
public struct extended
{
public char[] name;
public enum orient
{
__or_unspecified,
__or_narrow,
__or_wide
}
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 2)]
public int[] mbstate;
}
}
在C结构中,结构__file2是指针“ * extended;”,如何将其转换?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.