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

jxb_memory 2012-06-14 12:00:02
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];都不行啊???谁知道如何定义???
...全文
213 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
vinjent 2012-06-14
  • 打赏
  • 举报
回复
試試
Marshal.GetDelegateForFunctionPointer(IntPtr, type)
jxb_memory 2012-06-14
  • 打赏
  • 举报
回复
非常感谢各位,结贴给分。
__天涯寻梦 2012-06-14
  • 打赏
  • 举报
回复
[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;
}
cnfixit 2012-06-14
  • 打赏
  • 举报
回复
试试这个

/// char[16]
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=16)]
public string sDevID;
bdmh 2012-06-14
  • 打赏
  • 举报
回复
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]定义长度
ParanoidKing 2012-06-14
  • 打赏
  • 举报
回复

public struct test
{
public UInt16 wHeader;
public UInt32 dwSize;
public UInt32 dwID;

public Char cCmd;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]
public Char[] sDevID;


110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧