2010-04-08 35 views
5

我正在为游戏的脚本引擎调试项目。我希望用C#编写调试器的GUI。然而,实际的调试引擎嵌入在游戏本身中,并且是由C,C++和汇编补丁混合编写的。进程间通信C#<-->用于游戏调试引擎的C++

处理调试器GUI和调试引擎之间的通信的最佳方式是什么?这两个将在不同的进程中运行。

谢谢!

安迪

回答

4

如果可以需要Windows Vista或更高版本,和.Net 3.5或更高版本,命名管道提供简单,高性能的IPC。检查出this article

+1

命名管道工作在XP和.NET 2(通过PInvoke) - 所以他们总是一个不错的选择。 – 2010-04-09 00:11:56

+2

而且,在Unix上也是如此,因为没人提起它。 – 2010-04-09 00:19:11

+0

难道你不能再进一步,在C#实现中,使用命名管道与WCF实现这一点? – Jaxidian 2010-04-09 00:31:32

2

几年前,我做了这个。脚本调试器是用C#编写的,并在PC上运行;脚本运行时是用C++编写的,并运行我们当时支持的所有东西 - PC,PS3,Xbox360,Wii,DS,PSP和PS2。不管你的目标是什么,我都会建议放入某种图层,以便调试器和运行时与基础协议隔离。保持API调用,你可以留意他们!这/ /打开你的选择,并(如果正确)简化两端的代码。某些基于数据包的系统,数据包小于或等于1K,几乎可以映射任何东西。 (大于1K的传输可以在更高的级别上完成,仅使用公共API。)

如果您只是针对PC,我推荐使用TCP/IP。它是网络透明的,每个人都熟悉它的IP地址和端口,使用比明确的命名管道更好的API。对于下一代的标题,如果你想在跨平台兼容性和编码的简易性之间找到一个很好的平衡点,TCP/IP仍然是一条可行的路。适用于PC,Xbox360和PS3。 (关于命名管道,SN的目标管理器会给你命名管道支持PS3和PS2,我记得,它通过开发局域网端口,而不是游戏局域网端口,但Xbox360不支持它在所有它可能是值得支持的 - 如果我没有记错的话,这是你在PSP上唯一的选择 - 但它不是万能的灵丹妙药

就我个人而言,我在实施TCP/IP支持后停了下来,总之,Wii和DS都是可怕的,但方式不同,而且与其他任何方式不同,PSP仅支持命名管道,原因不明,PS3和PS2支持TCP/IP,但只能通过游戏局域网端口(开局局域网端口的工作方式不同,请勿使用它,请向制作人请求更多网络电缆并节省您的清理时间y。)Xbox360支持TCP/IP,但前提是您使用的是调试库,并且只能通过游戏IP。 (调试IP工作方式不同,请勿使用它。)

总之 - 无论你做什么,都需要这个绝缘层。

+0

幸运的是,我将这两款应用都瞄准了PC。我想我会去使用命名管道,并按照您的建议实施保温层。现在 - 实现这种绝缘层的最佳方式是什么?我不想用C++编写一个版本,而用C#编写另一个版本。有没有一种简单的方法可以在C#中使用C++代码,而无需从dll加载它? – Andy 2010-04-09 13:45:32

+0

你不能脱离DLL,但你可以编写C++代码,并在游戏中按原样使用。然后在Managed C++中编写一个Shim,并将该(和C++代码)编译为托管C++项目,以用于调试器解决方案。这应该很容易,并且工作相当透明。 (就我而言,我只是编写了两次代码,一次是用C++编写的,一次用C#编写的,并且不错。我不喜欢在游戏和工具之间共享代码,如果可能的话,代码最终会被拉进2个竞争方向。) – 2010-04-09 21:36:32