为了账号安全,请及时绑定邮箱和手机立即绑定

C# 与 C++ Socket通讯中,结构的定义中数组长度问题

C# 与 C++ Socket通讯中,结构的定义中数组长度问题

慕标5832272 2018-08-22 09:06:32
1 public class NMT_VLDATA<T1, T2>2   {3   [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray,SizeConst=2)]4   public T2[] Data;5   }SizeConst=2 ,这个值 怎么能动态设置,或者其他实现相同效果的解决方案也行各种对象 都用这一个模板,接收的时候需要指定对象的SIZE因为C++那边来的数据数量不一定,而且这个结构很多个对象会用到,我不能定义这么多对象去实现,还尝试过用字符串拼出一个类,编译,反射实例化不过没有成功,编译过程失败了
查看完整描述

2 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

没法动态设置,你必须改变策略。

将 T2[] Data 修改为如下:

IntPtr Data;

然后你需要一个机制知道 T2[] 数组的长度,一种方式是被调用方会显示告诉你一个 ContentLength,

另一种方式,被调用方约定读到某个特殊字符(比如 0XFF)后就停止读取。


查看完整回答
反对 回复 2018-08-27
?
aluckdog

TA贡献1847条经验 获得超7个赞

相互通信的话,简单的话可以传递字节数组,然后使用array数组偏移进行数据组包或拆分。这个方法麻烦在于需要自己实现每个结构的组包或拆包。实现上全部利用.net自身平台,不用互操作等。

另外可以利用json方法,传递字符流。直接绑定实体,再也不用关心长度问题或者字节对齐的问题了。这个方法从数据流量上也比较少。唯一的缺点就是binary信息需要base64编码或其它处理。因为交互的是字符流而不是字节流。


查看完整回答
反对 回复 2018-08-27
  • 2 回答
  • 0 关注
  • 721 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信