2013-02-10 73 views
1

我最近收購了我打算使用的3D遊戲引擎的C++源代碼。不過,我的C++編程技能遠非傳奇,我肯定發現C#更易於使用。我已經看到完全用C++實現的組件,並且只有一套.NET中的包裝類,它們沒有源代碼 - 相反,它們使用[ComImport]關鍵字直接指向DLL的類,將類標記爲外部類,而public虛擬外部'關鍵字將功能標記爲外部。因此,是否有可能使用SWIG,在C#中創建類和方法,直接鏈接到C++遊戲引擎的DLL中的類和方法?所以我應該能夠直接在.NET中實例化C++引擎的類,並從.NET中控制它們。這可能嗎?從C#使用SWIG使用C++遊戲引擎

+0

不確定SWIG是什麼,但在回答關於使用COM類的問題時,您絕對可以使用託管代碼中的COM類。 CLR圍繞COM類創建一個運行時可調用的包裝器。您也可以使用P/Invoke調用本地代碼。 – 2013-02-10 08:22:27

回答

1

如果您的C++類是COM對象,則只能使用[ComImport]。很有可能他們沒有被賦予這是一個遊戲引擎。 (搜索你的C++代碼的COM方法,如CoInitialize肯定知道)

鑑於你有源碼,理論上SWIG會爲你的C++創建C#包裝器,而不需要你將C++類作爲COM對象,但是不要期待這是完全微不足道的。

我過去採用的另一種方法是爲我的C++(google'extern「c」')編寫'C'封裝器,然後使用pinvoke輕鬆創建C#封裝器。在這種情況下,這是否可能取決於C++ API。

記住,任何C#=>天然的(C,C++等)會涉及到一些性能損失。多少將取決於C# - > native(或native - > C#)調用的頻率。