我可以在C#中使用C头进行协议吗?

ger*_*dvs 7 c# c++ tcp typedef visual-c++

我正在开发一个新的C#程序,我遇到了技术问题.在这个项目中,我需要在TCP/IP网络上与另一个没有基于Windows的系统进行通信.Al在另一个系统上编写的软件是用C语言完成的,任何其他未来的开发都将在C/C++中完成.这些协议都是由另一位工程师在C中完成的,协议的定义都是使用C typedef struct定义所有变量并使用memcpy提取/放置对C有效的数据包完成的.我的所有协议都作为C头提供包含所有typedef和struct的文件,以及将来对协议所做的任何更改都将以相同的方式完成.

我的问题是,如果有任何方法在C#中使用它们?

我试图将它们作为一个类编译成一个DLL库而不能正常工作,因为C#只能使用托管的C dll.如果我尝试编译为托管C类,由于协议中有许多数组,并且因为C代码必须符合一系列的工厂规范,因此许多变量都是typedef,因此它变得一团糟. d.现在我可以去重做C#中的所有结构,但这需要花费很多时间,每次进行更改或添加到协议中时,我都必须重做它.甚至没有提到我每次都会出现错误滑倒的危险.

它与我的C项目的工作原理是另一个工程师只会向我提供更新的头文件.

那么有没有办法直接在C#中使用这些头文件,或者每次更新协议时都可以进行自动转换?好吧,我基本上需要使用这个头文件从TCP/IP连接的数据流中提取数据(无需开始使用memcpy)

使用C#的原因是因为我在WPF中使用了大量图形而Visual C++不支持WPF

任何帮助或建议将不胜感激?

Hon*_*tan 1

我曾经不得不在 C# 中使用 C 标头来获取通过 TCP/IP 发送的编组结构的定义。我们使用的方法是通过T4文本模板解析头文件。不过,这是一项有点冗长的任务,您必须为标头编写足够好的 C 解析器,并使用它来生成 .cs 文件,因此存在很多字符串混乱。对于我们来说,这是一个足够好的解决方案,因此它也可能对您有所帮助。

在这里查看 T4:http://msdn.microsoft.com/en-us/library/bb126445.aspx