0

C# から MIT の Meep シミュレーション パッケージを呼び出す方法を知っている人はいますか (おそらく Mono、神が助けてくれます)。

生産性を損なう #$@%#$^ CTL フロントエンドに行き詰まっています。sim パイプラインに統合している他のいくつかのアプリは、C# (.NET) にあります。Meep への Python インターフェース (CTL よりも何年も先を行っている) を見たことがありますが、開発中のコードはできるだけ同種のものを維持したいと考えています。

いいえ、Python で残りのツールを作成することはできません。なんで?私たちはそれを嫌っているからです。愚かなバギンズ。私たちはそれを永遠に嫌います!

(実際には、さまざまなアプリ ターゲットは Python の実装には適していません。私が利用できる人材プールは、C# を使用した方がはるかに生産的です。)

または、より SO フレンドリーな質問形式で:

GNU C++ ライブラリを Windows の C# または Linux の Mono にリンクする便利な/可能な方法はありますか?

4

1 に答える 1

0

簡単で移植可能な解決策は、( 経由で) C ABI を公開する libmeep の C++ ラッパーを作成し、extern "C" { ... }P/Invoke を使用してこの API の周りに C# ラッパーを作成することです。これは、Python Meep ラッパーの AFAICT とほぼ同じです。

もちろん、フラットな C API を介して C++ クラスを C# クラスにマッピングすることは簡単ではありません。C# クラスで C++ クラスの IntPtr ハ​​ンドルを保持し、GCHandles または IntPtrs の辞書を使用して Dispose パターンを適切に実装する必要があります。 C++ オブジェクトを再表示するときに参照整合性を許可する (必要な場合) など。C# で C++ オブジェクトをサブクラス化し、仮想メソッドをオーバーライドできるようにすることは、非常に複雑になります。

これを自動的に実行できる SWIG というツールがありますが、結果は手書きのラッパーほど良くはありません。

Windows/.NET に制限する場合、Microsoft には C++/CLI と呼ばれる C++ のスーパーセットがあり、.NET API を直接エクスポートするラッパーを C++ で作成できます。

于 2010-10-21T05:38:15.037 に答える