12

私たちのプロジェクトには、.Net で記述される新しい UI レイヤーから再利用したい大量のネイティブ C++ コードがあります。

私はこの問題に C++/CLI を使用したいと思っています。ネイティブ クラスをシン マネージ クラスでラップすることにより、かなり単純でかなり技術的な方法があることがわかりました。このタスクを自動化するツールを見つけることができると期待しています。これは、多くの「人間」の思考を必要としない技術的な問題のように思えるからです。

これに明示的な p/invoke を使用するツールがあります - http://www.swig.org/Doc1.3/CSharp.htmlを参照してください。問題は、明示的な p/invoke はより扱いにくく、パフォーマンスの面で効率が悪いということです。

そのようなツールに精通している人はいますか?

そのようなツールがまだ利用できない固有の理由はありますか?

4

2 に答える 2

7

p / invokeの効率が低い理由は、署名のみを知っている、任意の関数への非常に汎用的なインターフェースでなければならないためです。架空のラッパージェネレーターのパフォーマンスは向上しません。

一方、カスタムラッパークラスをコーディングする開発者は、一緒に使用される関数などに関する多くの情報を持っているため、たとえばラッパー内に直接値を格納することで、多くの低速で不要な変換を回避できます。それらを.NETに適した形式に変換します。

したがって、そのようなツールが不可能であるというわけではありません。それによるメリットはほとんどないか、まったくありません。パフォーマンスを重視する場合は、ライフタイム管理のスマートポインターなどを備えた独自のラッパーを作成します。

もちろん、p/invokeはベア関数へのアクセスのみを提供します。そこで、SWiGが役立つはずです。これは、エクスポートされたベア関数を介してC++クラスのインターフェイスを公開するためです。

焦点がかなり狭いように聞こえますが、私はあなたが探しているものかもしれないツールの1つのリードを見つけました:

于 2012-12-25T02:50:45.100 に答える