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 }
各种对象 都用这一个模板,接收的时候需要指定对象的SIZE
因为C++那边来的数据数量不一定,而且这个结构很多个对象会用到,我不能定义这么多对象去实现,还尝试过用字符串拼出一个类,编译,反射实例化不过没有成功,编译过程失败了
没法动态设置,你必须改变策略。
将 T2[] Data 修改为如下:
IntPtr Data;
然后你需要一个机制知道 T2[] 数组的长度,一种方式是被调用方会显示告诉你一个 ContentLength,
另一种方式,被调用方约定读到某个特殊字符(比如 0XFF)后就停止读取。
相互通信的话,简单的话可以传递字节数组,然后使用array数组偏移进行数据组包或拆分。这个方法麻烦在于需要自己实现每个结构的组包或拆包。实现上全部利用.net自身平台,不用互操作等。
另外可以利用json方法,传递字符流。直接绑定实体,再也不用关心长度问题或者字节对齐的问题了。这个方法从数据流量上也比较少。唯一的缺点就是binary信息需要base64编码或其它处理。因为交互的是字符流而不是字节流。