Использование Steam DRM с XNA / Monogame (C #)

Я хочу использовать Steam DRM, интегрированный в SteamWorks-API, для защиты игры, реализованной на C # с использованием XNA (или Monogame / FNA для Mac и Linux). Сам Valve предоставляет свой SteamWorks-API только на C ++, но есть такие оболочки, как SteamWorks.Net для C #. Однако, насколько мне известно, они поддерживают только основные функции (такие как сохранение в облаке и достижения), но не поддерживают Steam DRM.

Есть ли способ интегрировать Steam DRM с игрой на C #?

Если нет, то какие есть альтернативы?


person ares_games    schedule 24.01.2016    source источник


Ответы (2)


OP:

Есть ли способ интегрировать Steam DRM с игрой на C #?

Напрямую? Нет. Косвенно? да. Позволь мне объяснить...

На самом деле вы хотите знать, как код C # может вызывать C ++, и ответ - да. Расскажите подробнее. Если вы посмотрите на ссылку, лучший ответ - изменить код C ++, чтобы преобразовать его в гибридную DLL C ++ / CLI. Поскольку это невозможно с API, предоставляемым Steam, альтернативой является создание прокси.

Что нужно сделать (поскольку вы не можете изменить DLL C ++), это создать новую DLL C ++ / CLI (назовем ее Proxy), которая вызывает Steam C ++ DLL ( S) от вашего имени. Это позволяет обойти проблему p-вызова библиотеки DLL c ++, которая подвержена изменению имени, в отличие от библиотеки c DLL, которая этого не делает. Прокси предоставляет классы, которые представляют собой смесь C ++ и .NET. Ваше приложение вызывает то, что, по его мнению, является просто кодом .NET внутри прокси. Прокси затем вызывает необработанный код C ++ в S.

Последовательность звонков выглядит так:

Приложение -> Прокси -> S

Если вы заметите, вы узнаете, что прокси - это действительно просто ваша собственная оболочка - очень простая для конкретных функций, которые интересуют ваше приложение, поэтому снова полагаться на стороннюю оболочку, похоже, не стоит, учитывая риск. В вашем прокси-сервере не должно быть особой и / или сложной бизнес-логики. Будьте проще. Не забывайте обновлять свою копию кода / библиотек Steam с помощью новейшего API Steam.

OP:

но есть оболочки вроде SteamWorks.Net для C #. Однако, насколько мне известно, они поддерживают только основные функции (такие как сохранение в облаке и достижения), но не поддерживают Steam DRM.

Лично я не хотел бы полагаться на потенциально бездоказательное; может рассинхронизироваться с изменениями Steam; Сторонний проект с открытым исходным кодом для чего-то столь же важного, как DRM, поэтому я советую придерживаться собственно SteamWorks.

Что такое c ++ / CLI?

Вкратце, c ++ / CLI - это технология Microsoft, которая существует уже некоторое время и позволяет создавать гибридные библиотеки DLL c ++ и .NET. Ваш код имеет доступ к .NET, а также к богатству исторического кода и библиотек c / c ++. Код .NET может вызывать общедоступные типы CLR в гибридной dll.

Более

  • изменение имени - несколько раздражающий аспект компиляторов C ++, которые изменяют метод имена вроде bool article::print_to (std::ostream&) в _ZN9wikipedia7article8print_toERSo по многим причинам, одна из которых связана с необходимостью уникального именования, но имеют нежелательный побочный эффект, затрудняя определение того, какой экспорт является записью для p-вызова.
person MickyD    schedule 24.01.2016
comment
@Aravol Да, я предполагаю, что это тот, который предполагается OP в SteamWorks.Net für C #. Опять же, я считаю излишним иметь целую оболочку .NET для SteamWorks (подбор игроков; DLC; голосовой чат и т. Д.), Когда OP сразу после аспектов DRM и даже после этого делает ваша собственная оболочка / прокси довольно проста. В прокси минимальный код. :) - person MickyD; 24.01.2016
comment
Спасибо за отличную идею, как использовать SteamWorks.dll (прямо из Valve), я обязательно постараюсь это сделать. Однако я думаю, что DRM SteamWorks превращается в исполняемый файл, который по-прежнему является C #, даже если используется предложенная dll прокси C ++ / CLI. - person ares_games; 24.01.2016
comment
Кроме того, в FAQ SteamWorks.net они заявляют: Вопрос: Работает ли оболочка Steam DRM с Unity или XNA / Monogame? Ответьте: нет. К сожалению, оболочка Steam DRM плохо работает с приложениями .NET, такими как Unity, и ваше приложение, скорее всего, не запустится, если оно будет упаковано. Даже если он действительно успешен и работает на вас, он часто терпит неудачу на других компьютерах. steamworks.github.io/faq - person ares_games; 24.01.2016
comment
Это интересно насчет Steam DRM и .NET. Сам Steam говорит: У вас есть оболочка .NET или ActionScript? ... У нас нет имеют какие-либо оболочки, доступные как часть SDK., а затем они говорят У вас есть DRM-решение для .NET ... В настоящее время у нас нет способа DRM для этих заголовков, но неясно, означает ли это, что они не поддерживают процессы .NET полностью или если у них просто нет поддержки .NET в SDK. В конце концов, в Steam есть игры XNA (невозможно подтвердить DRM). Не знаю ... - person MickyD; 24.01.2016