私は常にC#コードでDLLを参照していますが、それらはまだ謎のままであり、明確にしておきたいと思います。これは、DLLに関する質問の一種の頭脳ダンプです。
DLLは動的にリンクされたライブラリであると理解しています。つまり、別のプログラムが実行時にこのライブラリにアクセスして「機能」を取得できます。ただし、Web.dll
とBusiness.dll
(Web.dll
はフロントエンド機能でありBusiness.dll
、タイプとメソッドを参照する)を含む次のASP.NETプロジェクトを検討してください。
どの時点で
Web.dll
動的にリンクしBusiness.dll
ますか?Word(など)を使用しているときに、一見小さなタスクのためにWindows HDDがスラッシングしていることに気づきましたが、Wordがオフになり、他のDLLの機能に動的にリンクしていると思いますか?1a。さらに、DLLをロードしてリンクするものは何ですか?OSまたは.NETフレームワークなどのランタイムフレームワークですか?
1b。「リンク」のプロセスは何ですか?互換性チェックは行われますか?同じメモリにロードしますか?リンクは実際にはどういう意味ですか?
DLL内のコードを実際に実行するものは何ですか?プロセッサによって実行されますか、それともプロセッサがDLL内のコードを理解する前に、変換またはコンパイルの別の段階がありますか?
2a。C#.NETに組み込まれているDLLの場合、これを実行しているのは何ですか:.NETフレームワークまたはオペレーティングシステムを直接使用していますか?
LinuxのDLLはWindowsシステムで動作しますか(そのようなものが存在する場合)、それともオペレーティングシステム固有ですか?
DLLは特定のフレームワークに固有ですか?C#.NETを使用して構築されたDLLは、たとえばBorland C ++で構築されたDLLで使用できますか?
4a。4の答えが「いいえ」の場合、DLLのポイントは何ですか?さまざまなフレームワークがリンクされたファイルに独自の形式を使用しないのはなぜですか?例:.NETに組み込まれている.exeは、.abcのファイルタイプがコードにリンクできるものであることを認識しています。
Web.dll
/のBusiness.dll
例に戻ると、参照する必要のある顧客のクラスタイプを取得Business.dll
しWeb.dll
ます。これはBusiness.dll
、顧客クラスが実際に何であるかに関するある種の仕様が含まれていることを意味する必要があります。たとえば、Business.dll
ファイルをDelphiでコンパイルした場合、C#はそれを理解して顧客クラスを作成できますか、または「申し訳ありませんが、別のDelphi DLLからのみ使用できます」というヘッダー情報などがありますか? ?5a。同じことがメソッドにも当てはまります。
CreateInvoice()
DLLにメソッドを記述し、それをC ++でコンパイルしてから、C#からアクセスして実行できますか?何が私にこれをやめさせるか、または許しますか?DLLハイジャックに関しては、置換(不良)DLLには、ハイジャックされているものとまったく同じメソッドシグネチャとタイプが含まれている必要があります。元のDLLで使用可能なメソッドを見つけることができれば、これを行うのは難しいことではないと思います。
6a。別のDLLにアクセスできるかどうかをC#プログラムで決定しているのは何ですか?ハイジャックされたDLLに元のDLLとまったく同じメソッドとタイプが含まれていても、別の言語でコンパイルされている場合、それは機能しますか?
DLLのインポートとDLLの登録とは何ですか?