首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C++中传过来的数组到C#中转换的有关问题

2012-06-15 
C++中传过来的数组到C#中转换的问题C++中:struct test{WORD wHeaderDWORD nSizeDWORD nIDchar cCmd//c

C++中传过来的数组到C#中转换的问题
C++中:
struct test
{
WORD wHeader;
DWORD nSize;
DWORD nID;
char cCmd;
//char sDevID[16];
};
C#中:
public struct test
{
  public UInt16 wHeader;
  public UInt32 dwSize;
  public UInt32 dwID;

  public Char cCmd;
  //public string sDevID;

// C++的回调函数传过来的结构 p
public static int CallbackTestOK(IntPtr p, Int32 nEvt)
{
test t= (test)Marshal.PtrToStructure(p, typeof(FS_PACKET));
}
当结构中没有char sDevID[16]时没有问题,但是当添加了sDevID的定义后不知道C#中应该如何定义,
比如使用string或Byte[] p;p = new Byte[16];都不行啊???谁知道如何定义???

[解决办法]

C# code
public struct test{    public UInt16 wHeader;    public UInt32 dwSize;    public UInt32 dwID;    public Char cCmd;    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]    public Char[] sDevID;}
[解决办法]
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]定义长度
[解决办法]
试试这个
C# code
  /// char[16]    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=16)]    public string sDevID;
[解决办法]
C# code
[StructLayout(LayoutKind.Sequential)]public struct test{    public ushort wHeader;    public uint dwSize;    public uint dwID;    public byte cCmd;    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]    public byte[] sDevID;} 

热点排行