繁体   English   中英

将复杂结构编组为C#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM