2010-04-08 39 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