4
インポートライブラリはどのように機能しますか?詳細?
これはオタクにとってはかなり基本的なことのように思えるかもしれません。しかし、私はそれを明確にしたい。 Win32 DLLを使用する場合、通常はLoadLibrary()やGetProcAdderss()などのAPIを呼び出すだけです。しかし最近、DirectX9で開発しているので、d3d9.lib、d3dx9.libなどのファイルを追加する必要があります。 LIBは静的リンク用で、DLLは動的リンク用であると十分に聞いています。 したがって、私の現在の理解では、LIBにはメソッドの実装が含まれており、最終的なEXEファイルの一部としてリンク時に静的にリンクされます。DLLは実行時に動的にロードされ、最終的なEXEファイルの一部ではありません。 しかし、時には、いくつかのLIBファイルそこにいると来そう、DLLファイル: これらのLIBファイルは何のためのものですか? 彼らはどのように彼らが意図されていることを達成しますか? これらのLIBファイルの内部を検査できるツールはありますか? アップデート1 ウィキペディアをチェックした後、これらのLIBファイルはインポートライブラリと呼ばれていることを思い出します。しかし、メインアプリケーションと動的にロードされるDLLでどのように機能するのか疑問に思っています。 アップデート2 RBerteigが言ったように、DLLで生まれたLIBファイルにはいくつかのスタブコードがあります。したがって、呼び出しシーケンスは次のようになります。 私のメインアプリケーション-> LIBのスタブ->実際のターゲットDLL では、これらのLIBにはどのような情報を含める必要がありますか?私は次のことを考えることができます: LIBファイルには、対応するDLLのフルパスが含まれている必要があります。したがって、DLLはランタイムによってロードされる可能性があります。 各DLLエクスポートメソッドのエントリポイントの相対アドレス(またはファイルオフセット?)は、スタブでエンコードする必要があります。したがって、正しいジャンプ/メソッド呼び出しを行うことができます。 私はこれで正しいですか?他に何かありますか? ところで:インポートライブラリを検査できるツールはありますか?私がそれを見ることができれば、これ以上の疑いはありません。
90
c++
c
windows
visual-c++