我想使用 SteamWorks-API 中集成的 Steam DRM 来保护使用 XNA(或 Mac 和 Linux 的 Monogame/FNA)在 C# 中实现的游戏。Valve 本身仅在 C++ 中提供其 SteamWorks-API,但也有像 SteamWorks.Net für C# 这样的包装器。但是,据我所知,这些仅支持主要功能(如云保存和成就),但不支持 Steam DRM。
有没有办法将 Steam DRM 与 C# 游戏集成?
如果不是,有什么替代方案?
我想使用 SteamWorks-API 中集成的 Steam DRM 来保护使用 XNA(或 Mac 和 Linux 的 Monogame/FNA)在 C# 中实现的游戏。Valve 本身仅在 C++ 中提供其 SteamWorks-API,但也有像 SteamWorks.Net für C# 这样的包装器。但是,据我所知,这些仅支持主要功能(如云保存和成就),但不支持 Steam DRM。
有没有办法将 Steam DRM 与 C# 游戏集成?
如果不是,有什么替代方案?
操作:
有没有办法将 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 是一种 Microsoft 技术,它已经存在了一段时间,它允许您创建混合的 c++ 和 .NET DLL。您的代码可以访问 .NET 以及丰富的历史 c/c++ 代码和库。.NET 代码可以调用混合 dll 中的公共 CLR 类型。
bool article::print_to (std::ostream&)
- c++ 编译器的一个有点烦人的方面,它将方法名称转换成类似_ZN9wikipedia7article8print_toERSo
的原因有很多,其中一个原因是需要唯一的命名,但会产生不希望的副作用,即难以确定哪个导出是 p 的入口-调用。Steam DRM 包装器是否适用于 Unity 或 XNA/Monogame?
不,它没有。不幸的是,Steam DRM 包装器不能很好地与 Unity 等 .NET 应用程序配合使用,如果它被包装,您的应用程序可能无法启动。即使它确实成功并为您工作,它也经常会在其他计算机上失败。
所以至少有一个主要的实现发现这个确切的方面是站不住脚的。
请注意,有多个 使用第三方许可软件的Steam 游戏,而不是集成到 Steam 中,而是在启动时显示产品密钥。这可能有助于打开您的选择。