读书人

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

发布时间: 2012-06-15 19:37:05 作者: rapoo

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;} 

读书人网 >C#

热点推荐