通过UDP在C#中使用C++类,有哪​​些选项?

问题描述:

我正在通过UDP从C/C++应用程序接收数据。这个应用程序正在将类的memcpy放入缓冲区并按照我们的方式抛出它。我们的应用程序是用C#编写的,我需要以某种方式理解数据。我们可以访问结构的头文件 - 一切都基本上是一个结构或枚举。我们无法改变数据的格式,而且头文件可能会经常更改。通过UDP在C#中使用C++类,有哪​​些选项?

我已经考虑用C++重写我们的通信类来接收数据,然后我对它的序列化有了更多的控制,但是这需要很长时间,而且我的C++很生锈,更不用说我没有有很多C++线程的经验,这是必需的。

我也创建了一些原型C++库,提供了通过C#访问的头文件,但是我无法完全理解我如何在C#中实际创建和使用实际的类实例每当我看到这一点时,我所看到的只是外部函数调用,而不是外部类型的使用)。

我也看着编组。但是,由于数据可能经常发生变化,我认为这是最后的手段,并且感觉非常手动。

有没有人知道任何选项或有任何更多的针对性阅读或建议在这个问题上?

+1

*“类的memcpy”*看起来像什么?它是否包含元信息或任何可以使用的东西? – Sinatr

+0

如果您调用一个非托管dll的函数,该函数以自定义格式返回一个对象,则需要在C#中重建此格式/对象(例如,作为结构体)并将该对象转换为该对象。 – Noren

+0

悲伤地没有元数据。 – user3103055

为什么不在每一端使用Google Protocol Buffers,即C++和c#。你会采取你的C++定义,让PB为你做所有的序列化。

协议缓冲区是谷歌的语言中立,平台无关,可扩展的序列化结构化数据机制 - 思考XML,但更小,更快,更简单。您可以定义一次数据的结构,然后您可以使用特殊的源代码轻松地将结构化数据写入各种数据流并使用各种语言读取和读取数据。 more...

它可以在不同的操作系统即使在原始类型的对话通常是一个问题。

+0

谢谢,我将仔细研究这一点以备将来参考,但是,发送数据的C++进程无法修改,并且数据不仅仅是广播给我的设备,因此需要在所有客户端上更改代码好吧,目前这是不可能的。所有其他客户端都是C++,可以简单地使用memcpy。 – user3103055

+0

@ user3103055好的。然后,编组可能是您最好的选择,无论您是手动编写还是编写工具来自动生成C++结构中的c#定义 – MickyD