3

我想使用 SteamWorks-API 中集成的 Steam DRM 来保护使用 XNA(或 Mac 和 Linux 的 Monogame/FNA)在 C# 中实现的游戏。Valve 本身仅在 C++ 中提供其 SteamWorks-API,但也有像 SteamWorks.Net für C# 这样的包装器。但是,据我所知,这些仅支持主要功能(如云保存和成就),但不支持 Steam DRM。

有没有办法将 Steam DRM 与 C# 游戏集成?

如果不是,有什么替代方案?

4

2 回答 2

3

操作:

有没有办法将 Steam DRM 与 C# 游戏集成?

直接地?不,间接的?是的。让我解释...

你真正想知道的是c#代码如何调用c++,答案是肯定的。 告诉我更多。如果您查看链接,最好的答案是修改 c++ 代码以将其更改为混合 c++/CLI DLL。由于 Steam 提供的 API 无法做到这一点,因此另一种方法是创建一个代理

要做的事情(因为您不能修改 c++ DLL)是创建一个的c++/CLI DLL(我们称之为Proxy ),它代表您调用 Steam C++ DLL ( S )。这解决了 p-invoking c++ DLL 的问题,该 c++ DLL 受到名称修改的影响,而c DLL 则不会。 Proxy公开混合了 c++ 和 .NET 的类。您的应用程序调用它认为只是代理内的 .NET 代码。 Proxy然后调用S中的原始 c++ 代码。

调用顺序如下:

应用-->代理--> S

如果您注意到您将了解到代理实际上只是您自己的包装器 - 对于您的应用程序感兴趣的特定功能来说,这是一个非常简单的包装器,因此考虑到风险,再次依赖 3rd 方包装器似乎不值得。您的代理中不应任何特殊和/或复杂的业务逻辑。把事情简单化。 请务必使用 Steam 的最新 API 使您的 Steam 代码/库副本保持最新。

操作:

但是有像 SteamWorks.Net für C# 这样的包装器。但是,据我所知,这些仅支持主要功能(如云保存和成就),但不支持 Steam DRM

就我个人而言,我不想依赖可能未经证实的东西。可能与 Steam 更改不同步;与 DRM 一样重要的东西的第 3 方开源项目,所以我的建议是坚持使用SteamWorks

什么是 C++/CLI?

简而言之,c++/CLI 是一种 Microsoft 技术,它已经存在了一段时间,它允许您创建混合的 c++ 和 .NET DLL。您的代码可以访问 .NET 以及丰富的历史 c/c++ 代码和库。.NET 代码可以调用混合 dll 中的公共 CLR 类型。

更多的

  • name manglingbool article::print_to (std::ostream&) - c++ 编译器的一个有点烦人的方面,它将方法名称转换成类似_ZN9wikipedia7article8print_toERSo的原因有很多,其中一个原因是需要唯一的命名,但会产生不希望的副作用,即难以确定哪个导出是 p 的入口-调用。
于 2016-01-24T02:07:31.720 回答
1

根据Steamworks.NET

Steam DRM 包装器是否适用于 Unity 或 XNA/Monogame?

不,它没有。不幸的是,Steam DRM 包装器不能很好地与 Unity 等 .NET 应用程序配合使用,如果它被包装,您的应用程序可能无法启动。即使它确实成功并为您工作,它也经常会在其他计算机上失败。

所以至少有一个主要的实现发现这个确切的方面是站不住脚的。

请注意,有多个 使用第三方许可软件的Steam 游戏,而不是集成到 Steam 中,而是在启动时显示产品密钥。这可能有助于打开您的选择。

于 2016-01-24T02:40:25.727 回答