使用C#和C ++之间的字符串

时间:2015-02-26 15:24:31

标签: c# c interop low-level

我有一个问题,我认为在开始使用高级语言的低级开发人员中非常常见。我做了一些研究,但没有为我的问题找到合适的解决方案。

我有一个客户端 - 服务器应用程序,我想重新创建所有客户端,来自" scratch"使用C#,但因为我想保持服务器的原样," new"更新的客户端必须遵循发送和接收数据包的实际协议。

如果数据包只包含非托管类型(byteint等),它应该没问题,但是当我必须在C#中的托管客户端和字符串之间使用字符串时,我的问题出现了C / C ++中的非托管服务器。

我已经找到了解决这个问题的方法,但我真的不知道哪个是最好的,或者是否有更好的解决方案,我没有注意到。

第一种方法是使用fixed关键字来创建表示应用程序的每个数据包的结构,并且这样做C#允许我轻松地以非常低的成本(我猜)我的指针强制转换(来自{ {1}} byte*,反之亦然),无需担心所有编组和其他昂贵的方法。我认为这种方法特别糟糕,因为强迫我在缓冲区中使用packet_structure*数据类型,其中应该是数据包中的字符串,然后进行强制转换以将这些字节带到托管世界以进行正确处理。 / p>

我采用的另一种方法是将每个数据包的结构声明为已管理但标有sbyte属性,以便使用MarshalAs方法转换数据。我认为这种方法更昂贵,考虑到应用程序是一个游戏,我正在做的客户端是一个实时应用程序。我认为在每个数据包上广泛使用编组可能对应用程序来说非常昂贵。

是否有任何简单而美观的解决方案,我可以遵循C风格或任何其他解决方案,我的缺乏经验否认我?在C中,一个非常简单的指针应该足以让我解决问题。

我爱上了C#但是我很害怕我无法用这个平台做到这一点:(

任何人都可以请我解释一下吗? :/

非常感谢您的时间,任何形式的帮助都将非常受欢迎。

0 个答案:

没有答案