typedef struct ESG_SCHEDULE_ITEM_s
{
wchar_t Date[30];
wchar_t Time[30];
wchar_t TitleStr[64];
wchar_t ExtentInfo[64];
}ESG_SCHEDULE_ITEM;struct PROGRAMESG
{
unsigned int freqPoint;
unsigned char LogicID;
unsigned int ServerID;
unsigned int nts;
unsigned int startTs;
unsigned char demod;
unsigned int ScramblingMode;
int type;
wchar_t ServerName[20];
ESG_SCHEDULE_ITEM * esgschedule;
int schedulesum;
};struct PRINFO
{
PROGRAMESG pInfo[50];
UINT32 mProgramSum;
};
这是C++里的定义,现在从C++传递一个消息到C#处理,,该消息就是PRINFO结构体指针,,C#该如何将指针转成想要的消息数据呢?
{
wchar_t Date[30];
wchar_t Time[30];
wchar_t TitleStr[64];
wchar_t ExtentInfo[64];
}ESG_SCHEDULE_ITEM;struct PROGRAMESG
{
unsigned int freqPoint;
unsigned char LogicID;
unsigned int ServerID;
unsigned int nts;
unsigned int startTs;
unsigned char demod;
unsigned int ScramblingMode;
int type;
wchar_t ServerName[20];
ESG_SCHEDULE_ITEM * esgschedule;
int schedulesum;
};struct PRINFO
{
PROGRAMESG pInfo[50];
UINT32 mProgramSum;
};
这是C++里的定义,现在从C++传递一个消息到C#处理,,该消息就是PRINFO结构体指针,,C#该如何将指针转成想要的消息数据呢?
public struct ESG_SCHEDULE_ITEM
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 30)]
public UInt16[] Date;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 30)]
public UInt16[] Time;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
public UInt16[] TitleStr;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
public UInt16[] ExtentInfo;
}
[StructLayout(LayoutKind.Sequential)]
public struct PROGRAMESG
{
public uint freqPoint;
public byte LogicID;
public uint ServerID;
public uint nts;
public uint startTs;
public byte demod;
public uint ScramblingMode;
public int type;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public UInt16[] ServerName;
public IntPtr esgschedule;
public int schedulesum;
}
[StructLayout(LayoutKind.Sequential)]
public struct PRINFO
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
public PROGRAMESG[] pInfo;
public uint mProgramSum;
}
这是我目前定义的C#对应的结构体类型,,然后用PRINFO RecInfo = (PRINFO)Marshal.PtrToStructure(m.WParam, typeof(PRINFO));就会出现NotSurpportedException异常错误!各路过的客官有空支支招啊!
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)]
public string m_Date;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)]
public string m_Date;最主要是它不是字符串,当成数组来用的!