1

最近、使用する予定の3DゲームエンジンのC++ソースコードを入手しました。ただし、私のC ++コーディングスキルは伝説的とはほど遠いものであり、C#の方が間違いなく扱いやすいと思います。C ++で完全に実装され、.NETにラッパークラスのセットのみがあり、ソースコードがないコンポーネントを見てきました。代わりに、キーワードを使用してDLLのクラスを直接指し、[ComImport]クラスを外部としてマークし、 `public virtual関数を外部としてマークするextern'キーワード。したがって、SWIGを使用して、C ++ゲームエンジンのDLLのクラスとメソッドに直接リンクするクラスとメソッドをC#で作成することは可能ですか?したがって、C ++エンジンのクラスを.NETで直接インスタンス化し、.NETからそれらを制御できるはずです。これは可能ですか?

4

1 に答える 1

1

[ComImport] は、C++ クラスが COM オブジェクトである場合にのみ使用できます。これがゲームエンジンであるとは限らない可能性が高いです。(C++ コードで CoInitialize などの COM メソッドを検索して、確実に確認してください)

ソースがあれば、理論的には SWIG は C++ の C# ラッパーを作成します。C++ クラスを COM オブジェクトにする必要はありませんが、これが完全に簡単だとは思わないでください。

私が過去に取った別のアプローチは、C++ 用の「C」ラッパー (google 'extern "c"') を作成してから、pinvoke を使用して C# ラッパーを簡単に作成することです。あなたのケースでこれが可能かどうかは、C++ API に依存します。

C# => ネイティブ (c、c++ など) では、パフォーマンスが低下することに注意してください。C# -> ネイティブ (またはネイティブ -> C#) 呼び出しが行われる頻度によって、その量は異なります。

于 2013-02-11T02:21:24.460 に答える