C# 和 C++ 之间的通信(或任何托管和非托管语言之间)是一件令人头疼的事情,除非您有非常非常好的理由使用,否则应该避免使用。
对于通信,您可以使用管道、WCF、COM、P/Invoke 和其他一些自定义商业选项。你可以在网上搜索一下。在我工作的引擎中,我们使用由多个进程共享的匿名 MemoryStream。
但是总是会出现一个问题,即对于 C++ 中的任何结构更改,您都需要在 C# 中反映这些更改。就像您更改方法采用的参数或结构的定义一样。有一些解决方案可以自动“塑造”您的 C#,使其始终与 C++ 保持同步,但它们实施起来既昂贵又繁重。
现在,为什么你不应该打扰!诚然,您不会在 C++ 之外找到高端商业引擎。虚幻?C++。资源?C++。孤岛危机?C++。因为 C++ 提供了任何托管语言都无法提供的性能。它还允许直接控制内存和微观控制对象的创建和擦除方式。
那么,你为什么不关心呢?因为,除非您计划发布与刺客信条、半条命或天际一样大小或范围的 AAA 级游戏,否则 XNA 框架下的 C# 将提供充足的空间和性能。远远超过你应该需要的。如果您确实有性能问题,那么托管语言很可能不是问题,并且您的代码中应该还有很多优化需要完成。机会是,如果您在 C# 中遇到性能问题,您也会在 C++ 中遇到它们。
XNA 还提供了在 Windows、Xbox 和不同的 Microsoft 便携式设备上发布的能力。此外,无论如何,使用 DirectX 都会限制您使用这些平台。