私はかなり大きなシステムをC++で実装していますが、やりとりする必要があります。このシステムにはかなり大きなAPI、いくつかのC++ DLLがあります。これらのDLLは、素晴らしいCスタイルのAPIとは対照的に、C++クラスをエクスポートします。私はそれらを新しいC#プロジェクトから使用する必要があります。 - 唯一のC APIの C++ APIをC#から呼び出す方法
- P /呼び出し:私は.NETを知っているから、
はネイティブソフトウェアとの相互作用の三つの方法があります
私はそれを理解しているので、私はそれに応じて3つのアプローチがあります:
- Cでラッパーを作成し、P/Invokeで呼び出します。あまりにも多くの仕事のように思われる。
- COMを使用したラッパーの作成。それは私がどうやってやるのかわからないし、それが非常に簡単なものでなければ、私にとっては死にそうな技術を学ぶことには消極的です。
- C++/CLIでラッパーを書く。それでもまだ一番少ないようですが、それでもなおたくさんあります。
私の質問:すべての
まず私がなぜ.NET「であるとして、」私は単に C++クラスを使用することはできません知っていただきたいと思いますか?私はそれがメモリの問題だと仮定しています 管理。もし私がファイナライザを書こうと思っている以上に、 とIDisposableを実装しています。私が知っているからC++のクラスはちょうど です.P/Invokeは構造体をサポートしており、最初のパラメータとして構造体を取る関数 は、なぜ クラスをサポートしていませんか?
第2に、私は本当に怠け者で退屈で退屈な多くの人がいると仮定して、 の作業を行います。これらのDLLを使用するにはどうすればよいでしょうか?可能であればC#から直接呼び出す が最適です。そうでなければ、私は ラッパーを生産する自動ツールが大好きです。また、DLLが に変更されている可能性もありますが、IDはむしろわずかですが、idは強制的に強制されません。 は手動でラッパーを書き換えます。
本当に良い答えのために
、特に最初の部分、または良い自動ツールを、私は恵みに報いよ...
は、
1に私の古い答えを参照してください。 –
http://stackoverflow.com/questions/2120690/tool-for-creating-net-wrappers-for-a-com-dll –
私はC++/CLIが良いと思います。私はC++エクスポートでこれをやっている経験はありません。 – chris