2010-04-08 2 views
5

Я работаю над проектом отладчика для скриптового движка игры. Я надеюсь написать графический интерфейс отладчика в C#. Фактический механизм отладки, однако, встроен в саму игру и написан в виде комбинации C, C++ и патчей сборки.Inter process communication C# <--> C++ для отладки игры

Каков наилучший способ обработки связи между графическим интерфейсом отладчика и механизмом отладки? Эти два будут работать в отдельных процессах.

Спасибо!

Энди

ответ

4

Если вы можете требовать Windows Vista или более поздней версии и .NET 3.5 или более поздней версии, Named Pipes обеспечивают простое, высокопроизводительное IPC. Выезд this article.

+1

Именованные трубы работают в XP, а в .NET 2 (через PInvoke) - поэтому они всегда являются хорошим вариантом. –

+2

И, черт, на Unix тоже, так как никто не поднимает это. –

+0

Не можете ли вы сделать этот шаг дальше и в реализации C# реализовать это с помощью WCF с использованием именованных каналов? – Jaxidian

2

Я сделал это пару лет назад. Отладчик сценариев был написан на C# и запущен на ПК; сценарий был написан на C++ и работал во всем, что мы поддерживали в то время - ПК, PS3, Xbox360, Wii, DS, PSP и PS2.

Что бы вы ни выбрали, я бы рекомендовал вставить какой-то слой, чтобы отладчик и среда выполнения были изолированы от базового протокола. Храните вызовы API там, где вы можете следить за ними! Это // оставляет ваши параметры открытыми, и (если сделано правильно) упрощает код с обоих концов. Какая-то система на основе пакетов с пакетами 1K или менее сопоставима с любой ценой. (Передача> 1K может выполняться на более высоком уровне, используя только открытый API.)

Если вы только предназначаетесь для ПК, я рекомендую TCP/IP. Он прозрачен в сети, все знакомы с его IP-адресами и портами, нет сложнее использовать API-интерфейс, чем именованные каналы.

Для следующего титула gen, если вы хотите добиться хорошего баланса между совместимостью между платформами и простотой кодирования, TCP/IP по-прежнему подходит. Работает на ПК, Xbox360 и PS3.

(Что касается именованных каналов, диспетчер целей SN предоставит вам именованную поддержку труб для PS3 и PS2, как я помню, и он идет через порт dev LAN, а не через порт LAN игры, но Xbox360 не поддерживает его в все, поэтому, возможно, стоит его поддержать - и это ваш единственный вариант в PSP, если я правильно помню! - но это не универсальная панацея.

Лично я остановился после реализации поддержки TCP/IP, и я «Я очень рад, что я это сделал!» В сводке Wii и DS оба ужасны, но по-разному, и в отличие от всего остального. PSP поддерживает только именованные каналы по какой-то неизвестной причине. PS3 и PS2 поддерживают TCP/IP, но только через порт LAN-сети. (Порт LAN-сети работает по-разному. Не используйте его. Попросите вашего продюсера подключить больше сетевых кабелей и сохранить свой санитарий y.) Xbox360 поддерживает TCP/IP, но только если вы используете библиотеки отладки и только через IP-адрес игры. (Отладочный IP работает по-разному. Не используйте его.)

Короче говоря, что бы вы ни делали, вам понадобится этот изолирующий слой.

+0

К счастью, я нацелен на ПК с обоими приложениями. Я думаю, что я собираюсь пойти с именованными трубами и реализовать слой изоляции, как вы предлагали.Теперь - Каков наилучший способ реализации такого слоя изоляции? Я не хочу писать одну версию на C++ и другую на C#. Есть ли простой способ использовать код C++ в C# без необходимости загружать его из dll? – Andy

+0

Вы не можете уйти от DLL, но вы можете написать код на C++ и использовать как есть в игре. Затем запишите прокладку в Managed C++ и скомпилируйте это (и код C++) как управляемый проект C++ для использования в решении отладчика. Это должно быть достаточно простым и работать достаточно прозрачно. (Со своей стороны я просто написал код дважды, один раз на C++ и один раз на C#, и это было не так уж плохо. Мне не нравится делиться кодом между игрой и инструментами, если это возможно, код просто заканчивается тем, 2 конкурирующих направления одновременно). – 2010-04-09 21:36:32