インポートライブラリには「スタブ」があるので、実行可能ファイルは必要なDLLと機能を知っています。今私の質問は:それらのスタブは何ですか?彼らはどんな見た目ですか?実行可能ファイルは、DLLの正しい場所へのポインタをどのように設定しますか?また、両方とも.libファイルなので、通常のライブラリまたはインポートライブラリについて話しているかどうかは、どのようにわかりますか?インポートライブラリはどのように正確に動作しますか?
答えて
MSVCリンカはDLLに直接リンクせず、スタティックライブラリ(.lib)にしかリンクできません。
非常におおまかに言えば、インポートライブラリは通常の静的ライブラリであり、DLLのエクスポート関数ごとにスタブ関数を持っています。 DLL関数void func1()
と輸出func1
を持っている場合
例えば、対応するインポートライブラリは、インポートテーブルからfunc1
のアドレスを取るだろう、「ジャンプ」実行時にスタブ機能void __imp__func1() { __asm { jmp dword ptr func1; } }
が含まれています。だからスタブが必要です。
アプリケーションのvoid __declspec(dllimport) func1();
という宣言は、実際には__imp__func1()
を参照します。
LoadLibrary
とGetProcAddress
を呼び出して実行時にfunc1
のアドレスを取得することができます。同じ効果があります。あなたが使用しているコンパイラ(リンカ)とプラットフォームに依存し
。
I.e.あなたは(それを動的にロードする以外に、実行時にそのシンボルを解決)、それにリンクしたい場合、Windows OS、共有ライブラリ通常.DLLファイルで、
に、あなたは、対応する.LIBファイルを必要とする、それがスタブライブラリであります。
基本的にスタブライブラリは、DLLによってエクスポートされたすべてのシンボル(__declspec(dllexport)
)をスタブにあるシンボルに再マップし、__declspec(dllimport)
を使用してプログラム内で見つけて静的にリンクできる静的ライブラリです。
__declspec(dllexport)はWindows APIの関数か、Visual Studioにある命令ですか? –
@Daniel Nyman: '__declspec'はキーワードです(Visual Studio固有の限り)。 'dllexport'と 'dllimport'はそのキーワードの属性です。で詳細を参照してください。https://msdn.microsoft.com/en-us/library/3y1sfaz2.aspx – roalz
[__declspec](https://msdn.microsoft.com/en-us/library/dabb5z75.aspx)でありますキーワードは、Microsoft固有のストレージクラス属性を割り当てます。 – IInspectable
- 1. bindingnameはどのように正確に動作しますか?
- 2. execlpはどのように正確に動作しますか?
- 3. Javaヒープスペース - -Xmxはどのように正確に動作しますか?
- 4. system()はどのようにlinuxで正確に動作しますか?
- 5. のようなクエリは正確には動作しません
- 6. インポートはどのように正確に機能しますか?
- 7. 正規表現OR(|)どのように動作しますか?
- 8. Meteorはどのように動作しますか?クライアントとサーバーはどのように動作しますか?
- 9. この再帰SQL CTEは、どのようにして正確に動作しますか?
- 10. IEEE 754:どのように正確に機能しますか?
- 11. タイムスタンプ付きのデュアルサインコードはどのように正しく動作しますか?
- 12. このコードはどのように正しく動作しますか?
- 13. splitActionBarWhenNarrowはAndroidでどのように正しく動作しますか?
- 14. List ComprehensionはPythonでどのように正しく動作しますか?
- 15. このCodeIgniterコントローラクラスはどのくらい正確に動作しますか?
- 16. アセンブリのバージョンマッチングはどのように正確に機能しますか?
- 17. Robolectricで正確にカスタムのシャドウオブジェクトはどのように機能しますか?
- 18. これらのコードはどのように正確に機能しますか?
- 19. 正確にsimplepie set_timeout()は動作しますか?
- 20. C#の - どのようにプロセスが正常に起動したかどうかを確認するために
- 21. getline()は実際にどのように動作しますか?
- 22. #+ BIND:実際にはどのように動作しますか
- 23. 類義語はどのように正確に機能しますか?
- 24. ピーク検出アルゴリズムは正確にどのように機能しますか?
- 25. アニメーションはJavaでどのように正確に機能しますか?
- 26. Hibernateコールセパレーションジェネレータはどのようにして動作しますか?
- 27. LINQ IEnumerableはどのようにして動作しますか?
- 28. 正確なWSDLファイルと、PHPとのAPI統合でどのように動作するのでしょうか?
- 29. Makefileでは、VPATHはどのように動作しますか?
関連情報https://msdn.microsoft.com/en-us/magazine/bb985992.aspx –
実行可能ファイルはこれを認識しません。これはリンカーであり、適切なコードを出力します。 – IInspectable