2016-05-10 4 views
0

Iは、低レベルのプラットフォーム特定の操作を行うためのPInvokeを使用して、ウェブ上の例をたくさん見てきたが、それらはすべて同じ方法を毎回プロトタイプ基本的に使用します。次に、Microsoft Reference Sourceを見てみると、各アセンブリはアセンブリに必要なすべてのPInvoke関数を定義し、常にそのクラスを内部としてマークします。私の質問は「なぜ?」です。PInvokeのライブラリ

なぜ、我々はできるだけ多くのコードを再利用しようとしている世界では、我々はそれで必要なすべてのプロジェクトのためのCreateFileのための署名を書き直す必要がありますか?いくつかの標準化されたWinAPIライブラリを作成する際の問題は何ですか?私はいくつかの問題があると仮定します。なぜなら、ほとんどの場合、それは行われていないか、プロジェクトがすぐに放棄されたからです。内部のマーキング

+0

おそらく彼らは少数の場所で各apiを使用するだけであるが、多数の異なるメソッドをピンボケしている可能性が高いためです。そして、createfileのための標準的なラッパーがあります、それはsystem.io.file.createです、win32 apisを複製することは、一般的なapisには一般的に有用ではありません。そして、それらはfile.createの実装であるため、ここでは使用しません。 – user1937198

+0

公開されている場合は、文書化する必要があります。インポートされた各関数には、複数の異なる種類のピンボケが含まれている可能性があります。彼らが出版されたら、彼らは変更することができませんでした。 –

+0

コード解析ツールで内部的に使用することが求められています。今日はFxCopとして知られています。 https://msdn.microsoft.com/en-us/library/ms182161.aspx安全上の懸念を超える理由がない限り、ピンボケ宣言については、たぶん*非常に便利です。 –

答えて

1

これらPをマークアセンブリは/署名を呼び出します。多くの場合、クロスプラットフォーム(P/Invokeメソッドが存在しないプラットフォームも含む)であることが必要です。それらを内部にすることで、発信者はどこでも動作するより高いレベルの抽象に集中できます。

できるだけ多くのコードを再利用しようとする世界では、必要なプロジェクトごとにCreateFileの署名を書き直す必要がありますか?いくつかの標準化されたWinAPIライブラリを作成する際の問題は何ですか?

このようなライブラリは、メタデータではかなり大きくなる可能性があり、ライブラリのほとんどのユーザーには、含まれる内容のほんの一部しか必要でない可能性があります。しかし、私はコードの再利用とp/invokeシグネチャの信頼できるソースの希望に共感して、P/Invoke library on GitHubを開始しました。これは、少なくともWin32からのP/Invokeシグネチャをすべて含むようになっています。これはコードが常にコンパイルされることを除いて、pinvoke.netのようなもので、あなたはそれをナゲットパッケージで消費することができます。 私は、あなたがしようとしているように聞こえるのはあなたにとって有益だと思います。

0

は、彼らはそれらの宣言が外部のアセンブリにさらされたくないことを、仕様です。

.NETフレームワークは、ユーザーが直接それらを使用する必要はありませんが、彼らは上記の抽象化のレベルを扱うことができるようにするWin32 APIの周りを包むように意図されています。彼らが以下のAPIを公開すると、私は抽象レイヤーの良いデザインとは思えません。いくつかのレイヤーの後では、それはあまりにも多くの関数を公開しています。

私は、問題は、カプセル化と再利用性の間にあると思います。カプセル化は実際には再利用性を低下させますが、保守性が向上します。その目的は、抽象化のより高いレベルを提供することであるため、内部がそうするように

+0

私はそれが意図的だったと確信しています、私はそれを理解していません。 はい、.NETフレームワークは抽象レイヤーですが、すべての抽象レイヤーのように、時には下に移動する必要があります。私はなぜ、それが必要な人のためのオプションの、よく文書化され、管理された一連のメソッドを提供するのではなく、同じコードを何度も再実装するように強制する「良いデザイン」と考えられているのです。 さらに、Interopの詳細を隠さないPInvokeメソッドライブラリを提供することに技術的な問題があるのか​​どうかは疑問です。 – Benjamin

関連する問題