首页 新闻 会员 周边

.NET互操作:含数组的结构体封送问题?

0
悬赏园豆:20 [已解决问题] 解决于 2010-10-28 12:37

在将C风格的结构体转换为.NET对应结构体时候产生很多问题,有如下两个C语言结构体:

typedef struct _wfs_ptr_retract_bins
{
    WORD    wRetractBin;
    USHOR   TusRetractCount;
} WFSPTRRETRACTBINS, * LPWFSPTRRETRACTBINS;

typedef struct _wfs_ptr_status
{
   WORD  fwDevice;
   WORD  fwMedia;
   WORD  fwPaper[16];
   WORD  fwToner;
   WORD  fwInk;
   WORD  fwLamp;
   LPWFSPTRRETRACTBINS*   lppRetractBins;
   USHORT  usMediaOnStacker;
   LPSTR  lpszExtra;
} WFSPTRSTATUS, * LPWFSPTRSTATUS;

如何在C#中定义与其相同的结构体?我从非托管DLL获得一个WFSPTRSTATUS类型的指针lpBuffer,通过这个指针解析其中的值赋到C#中定义的结构体。下面是我定义的结构体,但是转化时出错。

        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct WFSPTRRETRACTBINS
        {
            public ushort wRetractBin;
            public ushort usRetractCount;
        }


        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct WFSPTRSTATUS
        {
            public ushort fwDevice;
            public ushort fwMedia;
            [MarshalAsAttribute(UnmanagedType.U2,SizeConst = 16)]
            public ushort fwPaper;
            public ushort fwToner;
            public ushort fwInk;
            public ushort fwLamp;
            public IntPtr lppRetractBins; /// LPWFSPTRRETRACTBINS* 类型
            public ushort usMediaOnStacker;
            [MarshalAsAttribute(UnmanagedType.LPStr)]
            public string lpszExtra;
        }

各位大侠救命啊!很急很急。

苍岭飞龙的主页 苍岭飞龙 | 初学一级 | 园豆:0
提问于:2010-10-27 16:34
< >
分享
最佳答案
0

[MarshalAs(UnmanagedType.ByValArray,ArraySubType= UnmanagedType.U2, SizeConst = 16)]
public ushort[] fwPaper;

[MarshalAsAttribute(UnmanagedType.LPSTR,SizeConst = 255)]
public string lpszExtra;

收获园豆:20
Launcher | 高人七级 |园豆:45045 | 2010-10-27 16:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册