1

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

4

1 回答 1

1

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

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

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

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

于 2013-02-11T02:21:24.460 回答