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