海康sdk中union结构体转换c#

Talsha 2018-08-27 11:38:25

struct{
DWORD dwSize;
BYTE byStreamMode;
BYTE byRes1[3];
NET_DVR_DEC_STREAM_MODE uDecStreamMode;
BYTE byRes2[64];
}NET_DVR_PU_STREAM_CFG_V41,*LPNET_DVR_PU_STREAM_CFG_V41;

union{
NET_DVR_DEC_STREAM_DEV_EX struDecStreamDev;
NET_DVR_PU_STREAM_URL struUrlInfo;
NET_DVR_DEC_DDNS_DEV struDdnsDecInfo;
BYTE byRes[300];
}NET_DVR_DEC_STREAM_MODE,*LPNET_DVR_DEC_STREAM_MODE;

struct{
NET_DVR_STREAM_MEDIA_SERVER struStreamMediaSvrCfg;
NET_DVR_DEV_CHAN_INFO_EX struDevChanInfo;
}NET_DVR_DEC_STREAM_DEV_EX,*LPNET_DVR_DEC_STREAM_DEV_EX;

根据网上资料写的c#对应的

[StructLayout(LayoutKind.Sequential)]
public struct NET_DVR_PU_STREAM_CFG_V41
{
public uint dwSize;

public byte byStreamMode;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3, ArraySubType = UnmanagedType.I1)]
public byte[] byRes1;

public NET_DVR_DEC_STREAM_MODE uDecStreamMode;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64, ArraySubType = UnmanagedType.I1)]
public byte[] byRes2;

public void Init()
{
byRes1=new byte[3];
byRes2=new byte[64];
}
}

[StructLayout(LayoutKind.Explicit,Size = 300)]
public struct NET_DVR_DEC_STREAM_MODE
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 300, ArraySubType = UnmanagedType.I1)]
[FieldOffsetAttribute(0)]
public byte[] byRes;
}

[StructLayout(LayoutKind.Sequential)]
public struct NET_DVR_DEC_STREAM_DEV_EX
{
public NET_DVR_STREAM_MEDIA_SERVER struStreamMediaSvrCfg;

public NET_DVR_DEV_CHAN_INFO_EX struDevChanInfo;
}

现在对NET_DVR_DEC_STREAM_DEV_EX中struDevChanInfo赋值后,准备进行StructToBytes转换为byte时程序挂掉(还未进入StructToBytes)。是不是我结构体有问题??
...全文
192 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
拜一刀 2018-08-28
  • 打赏
  • 举报
回复
海康有全套c#吧
倒是vb用起来自己转好多东西.....
xian_wwq 2018-08-27
  • 打赏
  • 举报
回复
struct对应翻译的时候,一定要注意字节对齐方式
StructLayout特性支持三种附加字段:
CharSet、Pack、Size。
某一项对不上都会导致DllImport失败
wanghui0380 2018-08-27
  • 打赏
  • 举报
回复
??海康自己有完整的c# demo,干嘛还自己转
xuzuning 2018-08-27
  • 打赏
  • 举报
回复
你给的信息不足,无法判定你书写的是否合适
既然 C# 取消了联合,自然有其道理(实现上有难度)。硬要去模拟一个,显然不是稳妥的办法
其实借助 内存映射文件,就可轻松的实现结构的转换
Talsha 2018-08-27
  • 打赏
  • 举报
回复
顶上去

110,561

社区成员

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

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

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