同事用c++写了一个dll,其中有一个结构体如下typedef struct Item {
WORD BWType;
TCHAR Name[10];
TCHAR Number[20];
WORD NumType;
WORD Scope;
FILETIME Start;
FILETIME End;
DWORD Ceoid;
} Item, *Item;
在C++中sizeof(Item)=88我在C#中如何定义一个结构体和他对应呢?我试如下定义: [StructLayout(LayoutKind.Sequential)]
public struct Item
{
public ushort BWType;
[MarshalAs(UnmanagedType.LPArray, SizeConst = 10)]
public char[] Name;
[MarshalAs(UnmanagedType.LPArray, SizeConst =20)]
public char[] phoneNumber ;
public ushort numType ;
public ushort scope ;
public UInt64 startTime;
public UInt64 endTime ;
public uint ceoid ;
}
在C#中Marshal.SizeOf(Item)=96 ,好奇怪啊,这96是怎么来的呢?
WORD BWType;
TCHAR Name[10];
TCHAR Number[20];
WORD NumType;
WORD Scope;
FILETIME Start;
FILETIME End;
DWORD Ceoid;
} Item, *Item;
在C++中sizeof(Item)=88我在C#中如何定义一个结构体和他对应呢?我试如下定义: [StructLayout(LayoutKind.Sequential)]
public struct Item
{
public ushort BWType;
[MarshalAs(UnmanagedType.LPArray, SizeConst = 10)]
public char[] Name;
[MarshalAs(UnmanagedType.LPArray, SizeConst =20)]
public char[] phoneNumber ;
public ushort numType ;
public ushort scope ;
public UInt64 startTime;
public UInt64 endTime ;
public uint ceoid ;
}
在C#中Marshal.SizeOf(Item)=96 ,好奇怪啊,这96是怎么来的呢?
你的c#结构定义是错的,所以计算结果也不正确
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FItem
{
public ushort BWType;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
public string Name;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string phoneNumber;
public ushort numType;
public ushort scope;
public FILETIME startTime;
public FILETIME endTime;
public uint ceoid;
}
上面用红色标注的地方都是你写的不正确的地方