使用C#的C++游戏引擎,使用SWIG

本文关键字:使用 SWIG 引擎 C++ 游戏 | 更新日期: 2023-09-27 17:58:43

我最近获得了我计划使用的3D游戏引擎的C++源代码。然而,我的C++编码技能远非传奇,我肯定发现C#更容易使用。我见过完全用C++实现的组件,它们在.NET中只有一组包装类,没有源代码——相反,它们直接指向DLL的类,使用[ComImport]关键字将类标记为外部,使用"public virtual extern"关键字将函数标记为外部。因此,是否可以使用SWIG,在C#中创建直接链接到C++游戏引擎DLL中的类和方法的类和方式?所以我应该能够直接在.NET中安装C++引擎的类,并从.NET中控制它们。这可能吗?

使用C#的C++游戏引擎,使用SWIG

只有当C++类是COM对象时,才能使用[ComImport]。他们很有可能没有得到这是一个游戏引擎。(在您的C++代码中搜索COM方法,如CoInitialize,以确定)

如果你有源代码,理论上SWIG将为你的C++创建C#包装器,而不需要你的C++类成为COM对象,但不要指望这完全是微不足道的。

我过去采用的另一种方法是为我的C++编写一个"C"包装器(谷歌的"extern"C"),然后使用pinvoke轻松创建C#包装器。在您的情况下,这是否可能取决于C++api。

请记住,任何C#=>本机(C、C++等)都会带来一些性能损失。多少将取决于C#->本机(或本机->C#)调用的频率。