これについてはかなりの質問がありますが、一般的にはC++ライブラリを参照しています。C++/CLIまたはC#P/extern関数を呼び出す、大きなCライブラリを呼び出す
私は非常に重要なCのdll(約2800の関数)を持っており、これらのうち約70のAPIをC#で作成する必要があります。私はP/Invokeを使い始めましたが、Cコード(ポインタを他のものや二重ポインタなどの構造体)から渡したり返す複雑な構造を持っていて、必要なものを手に入れるのにかなり時間がかかりました。
今私はC++/CLIについては全く知らないけど、C++で少し経験があります。
私のプロジェクトでこれを学ぶ努力をする価値があるのだろうかと思っています。 C++ラッパーを使用することなどマーシャリング構造、グローバルヒープ内の割り当てのポインタ、と格闘するかどうかを持っていない私を可能にするのでしょうか?....多く、大きなアップはかなりです。この偉大なコミュニティ
ありがとうございました。 私はあなたがうまくいくことを確認するために、私の現在のDLLをC++/CLIでコンパイルするだけです。そして、一度私はすべてのC#で使用するための大丈夫ですか?あるいは、私はC++クラスを書く必要がありますか? C++/CLiラッパーに関するすべての記事は、既存のC++クラスごとにクラスを作成することについて言及しています...クラスがないので、どのように進むべきかわかりません。チュートリアルやそれは素晴らしいでしょう! – nche
いいえ、私はあなたのDLLをそのまま残し、C++/CLIラッパーを書く方が良いと思います。 C++/CLIラッパーは、ネイティブDLLを呼び出すことができ、管理されたインターフェイスをC#コードにエクスポートすることもできます。 –
@Nchek:通常、リンクする前にネイティブDLLの一部であるオブジェクトファイルを取得し、新しいC++/CLIコードで静的にリンクして、単一のDLLを作成します(インストールの頭痛を取り除きます。グローバルアセンブリキャッシュにインストールされているなど)。しかし、既存のコードに '/ clr'を使う理由はありません。 –