2010-11-28 10 views
0

それは時間の無駄であるか非管理DLLの.NETラッパーを作成するための明白な&測定可能な利点があるのでしょうか?アンマネージDLLの.NETラッパーを作成する際の長所と短所は何ですか?

詳細情報:

  • 私はDLLをコントロールしていないが、しかし私は、最新バージョンに置き換えるしないことを決定することができます。
  • DLLは、多くのクラスがあります。そして多くの支持列挙。
  • DLLは重要な機能でプロジェクトを提供します。

答えて

1

私の知っているいくつかの利点:あなたのマネージラッパーでXMLDOCを置くため、IDE内のすべての開発者が利用できるドキュメントを持つことができます

  1. 。トラブルや経験の少ない開発者のためのバグの原因になる可能性があり、すべてのIntPtr S、離れてあなたが抽象
  2. あなたは、エラーの可能性を低減、アンマネージドDLLに低レベルのビルディング・ブロックのうち、一般的なシナリオのためのより高いレベルのオペレーションを構築することができます。 (もちろん、これはアンマネージDLLのラッピングに固有のものではありません)。
1

あなたは.NETガベージコレクションが必要なくなっているリソース(ファイルハンドルなど)を解放するために使用できるようになりますIDisposableを実装するコードとサードパーティのコードが使用するリソースの管理をラップすることができますを使用して。

その他の利点 - ほとんどの標準的なすべてのサードパーティのコードが含まれます:

あなたが将来的にはサードパーティ製のDLLに発生する可能性のある変更からあなたのコードの大部分を絶縁しています。変更がある場合は、ラッパークラスの実装を変更するだけです。残りのコードは変更されません。

また、これらのいずれかが、アンマネージコードに欠けていた場合は、ラッパークラスにチェックキャッシング、検証とエラーでビルドすることができます。

+0

私はDLLをアップグレードしないことを選択できます。だから私はそのような問題はありません。 –

+0

@Pierre - 更新された回答。 – ChrisF

+0

あなたの貢献に感謝クリス! –

2

長所:それはあなたが頼りにする必要がないよう

  • アンマネージDLLの独自のローダーを書くことができ.NETプロジェクトでDLLの機能を使用するためにはるかに簡単です

    1. LoadLibraryのアルゴリズム。
    2. アンマネージドDLLがアウトプロセス

    短所留まるように後で分離を追加することができます:あなたはDLLをラップすることができた場合はそれが仕事

  • たくさんのだ

    1. をまた、必要なものだけでよりシンプルで小さなインターフェースを提供し、それが価値があるかもしれません。

      また、DLLを制御することはできないと言われていますが、可能であれば.libのC++/CLIラッパーは、アンマネージコードを使用する方がはるかに良い方法です。NET(ほとんどの場合、これは他の人がこの質問を参照するか、アクセス権を得ることができます)。

    0

    このDLLをC#またはVB.NETプロジェクト(またはC++/CLIを除く他の.net言語)で使用する場合は、妥当な選択肢はありません(管理対象を再作成しない場合はバージョンDLLを完全にゼロから)。もちろん、COMを代わりに使用することもできますが、ほとんどの場合、.NETクライアントプロジェクトの視点からはるかに悪い結果が得られるほど難しくなります。

    EDIT:あなたのコメントによると、DLLはです。すでに COM Dllです。もちろん、.NETラッパーは必要ありません。私の答えは、あなたが普通のネイティブのC++ DLLを持っていたというケースを想定していました。ここでCOMを使用すると、「COMラッパーを追加する」という意味です。

    +0

    なぜそれがより困難ではるかに機能するのかを詳しく説明できますか?ありがとうございました –

    +0

    "より硬い"は相対的なものです - 私の個人的な意見かもしれません。しかし、私は昨年かなりの量のC++/CLIプログラミングを行ってきました。ネイティブのC++ DLLをカプセル化することは本当に簡単です。しかし、MFCやATLを使用したCOMプログラミングは、私の目にはもっと難しいものです。あなたは、C++ - To-COM型のシステムマッピング、メモリ管理、さまざまなスレッドモデル、技術的なものの穴がたくさんあるIMHOと戦わなければなりません。それはエラーが起こりやすく、そうするのが簡単ではありません。 –

    3

    DLLは、これは奇妙な質問ですが、重要な詳細情報が欠落している多くのクラス

    を持っています。これらのクラスをマネージコードから使用する場合は、は選択肢がありませんが、はC++/CLIラッパーを記述する必要があります。 C++コンパイラだけが正しくコンパイルできます。 P /コンストラクタを呼び出すことは技術的に不可能ではありませんが、エクスポートされた関数名を見つけるのは非常に面倒ですが、オブジェクトに割り当てるメモリ量を推測することはできません。 C++コンパイラだけが知っています。

    ラッピングを書くことはあまり難しくありませんが、主に機械的です。その詳細については、this answerのリンクを参照してください。

    +0

    どのように? .NETプロジェクトで直接DLLを参照できます。特定の関数を参照せずに指すこともできます。 –

    +0

    ええと、COMサーバーでなければなりません。参照を追加するときに、ビルドディレクトリにInterop.foo.dllがありますか?それらをラッピングすることはほとんどありません。まあ、決して。 –

    +0

    いいえ、そうではありません。あなたは答えが完全に正しいです。 –

    1

    長所:

    1)あなたのアルゴリズムのセキュリティのいくつかの並べ替え、彼らは、アンマネージDLLにある場合。

    2)GCのボトルネックを防止します。メモリのフルコントロール。

    短所:

    1)あなたは、64ビット.NET環境を使用したい場合は32ビットおよび64ビットの両方が自分のアンマネージドDLLのビルドをサポートしている必要があります。

    2)スピードの低下を防ぐため、管理コードと非管理コードの間に非常に小さなインターフェイス(ブリッジ)を作成する必要があります。時には不可能です。

    関連する問題