在调试器GUI和调试引擎之间处理通信的最佳方法是什么?两个进程将在不同的进程中运行。
谢谢!
安迪
如果您的系统能够支持Windows Vista或更高版本,并且安装了.Net 3.5或更高版本,那么命名管道可以提供简单、高效的进程间通信。您可以查看这篇文章了解更多细节。
我在几年前做过这个。脚本调试器是用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的Target Manager将为您提供PS3和PS2的命名管道支持,我记得它通过开发LAN端口而不是游戏LAN端口进行传输,但Xbox360根本不支持它。因此,如果值得支持它-如果我记得正确的话!-但它不是万能的灵丹妙药。
个人而言,在实现TCP/IP支持后,我就停了下来,我很高兴我这样做了!简而言之,Wii和DS都很糟糕,但方式不同,并且与其他任何东西都不同。PSP只支持命名管道,原因不明。PS3和PS2支持TCP/IP,但仅通过游戏LAN端口。(开发LAN端口的工作方式不同。不要使用它。向您的制片人索取更多的网络电缆,节省您的理智。)Xbox360支持TCP/IP,但仅在使用调试库并仅通过游戏IP时才支持。(调试IP的工作方式不同。不要使用它。)
简而言之-无论你做什么,你都需要那个隔离层。