使用C#的C++游戏引擎,使用SWIG
Using a C++ game engine from C# using SWIG
我最近获得了我计划使用的3D游戏引擎的C++源代码。然而,我的C++编码技能远非传奇,我肯定发现C#更容易使用。我见过完全用C++实现的组件,它们在.NET中只有一组包装类,没有源代码——相反,它们直接指向DLL的类,使用[ComImport]
关键字将类标记为外部,使用"public virtual extern"关键字将函数标记为外部。因此,是否可以使用SWIG,在C#中创建直接链接到C++游戏引擎DLL中的类和方法的类和方式?所以我应该能够直接在.NET中安装C++引擎的类,并从.NET中控制它们。这可能吗?
只有当C++类是COM对象时,才能使用[ComImport]。他们很有可能没有得到这是一个游戏引擎。(在您的C++代码中搜索COM方法,如CoInitialize,以确定)
如果你有源代码,理论上SWIG将为你的C++创建C#包装器,而不需要你的C++类成为COM对象,但不要指望这完全是微不足道的。
我过去采用的另一种方法是为我的C++编写一个"C"包装器(谷歌的"extern"C"),然后使用pinvoke轻松创建C#包装器。在您的情况下,这是否可能取决于C++api。
请记住,任何C#=>本机(C、C++等)都会带来一些性能损失。多少将取决于C#->本机(或本机->C#)调用的频率。
相关文章:
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 使用 SWIG 更改生成的 CS 函数中的返回类型
- 使用 swig 追加到字节数组
- 如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?
- <string> 如何在使用 SWIG 时将 int 数组和 List 作为参数传递给 C# C++
- 使用SWIG从C++回调到C#
- 如何使用 swig C++命名空间作为 python 模块公开
- 使用 Swig 在成员中包装具有互斥锁的 C++ 类时出现问题
- 如何使用 SWIG 接口访问 python 中的 C++ typedef'd 结构
- 使用SWIG将numpy数组元素(int)传递给c++int
- 错误:使用 SWIG 的未知类型名称"类"
- C++ 使用 SWIG 和 Visual Studio 2017 在 python 中导入 DLL
- C++类在Python中使用SWIG的奇怪行为
- 使用 SWIG 绑定 Python/C++ 模板
- 使用 c++ uint8_t * 从 c# 使用 SWIG
- 使用 SWIG 初始化对 C# 共享指针的引用,从C++
- 包装C++函数以使用 SWIG 获取 Lua 字符串表
- 如何使用 SWIG 将 C++ int** 返回值给 Python
- 使用 swig 在 Python 中分段错误(核心转储),但当我更改变量名称时它可以工作
- 使用 SWIG 将C++类包装在 Python 中