2011-12-22 2 views
0

この質問は、ライブラリの動的リンクとアプリケーションでのライブラリの動的リンクの使用に関するものです。C++でのダイナミックリンクライブラリについて

たとえば、Visual Studio環境を使用してC++を使用してアプリケーションを開発しています。以下のためここでは

我々はインクルードディレクトリ、および追加の依存で 追加で指定したヘッダファイルが含ま:追加のライブラリディレクトリ内Mylibrary.lib :私たちは図書館

のパスを指定し、Windowsで、我々はまた、「のLoadLibrary」APIを持っているが動的にリンクされたライブラリをロードするために使用されます。

私たちは「LoadLibraryの」APIを使用する必要がありますなぜ我々は追加の依存ライブラリ内のDLLを含めると私の質問は

  1. のですか?
  2. "LoadLibrary" APIを使用する必要がありますか?

ありがとう!

答えて

0

により、たとえば文字列に インターネットネットワークアドレスを変換するために決定した時点でneedesソフトウェアを持っていることを想像してみてください。 windows vista以降では、ipv6を扱うことができる「InetNtop」機能を使用できますが、DLLに直接リンクすると、プログラムはより低いOS(Windows XPなど)では動作しません。 したがって、おそらく最善の解決策は、 "InetNtop"を使用するDLLと "inet_ntoa"を使用するDLLの2つを作成することです。 "メイン"プログラムは、彼がインストールしたOSに従って、実行時に "InetNtop DLL"または "inet_ntoa DLL"のLoadLibraryを実行します。

2

LoadLibrary実行中のマシンにDLLがない場合、プログラムの実行を継続できます。チェック可能なエラー状態を返し、実行を継続することができます。

また、リンクすると、他のバイナリの使用クラスのようなものを行うことができます&その他。 LoadLibraryは、GetProcAddressで機能を見つけることができます。

+0

は実際に、第三の選択肢は、(私は本当にお勧めしません)があります。これにより、libファイルでdllを通常どおり扱いますが、読み込み時には必要ありませんが、最初のアクセス時には必要です。これは暗黙のうちにコンパイラによって(私が知る限り)実行されるので、いくらか隠されていて、デバッグが困難なエラーにつながります。詳細はhttp://msdn.microsoft.com/en-us/library/151kt790.aspxを参照してください。 –

0

dllを追加の依存関係ライブラリに含めることができ、次にloadlibraryを使用する理由を尋ねました。静的にリンクしながら

しかし、プログラマはコンパイル時に呼び出し側プログラムにリンクされている 追加のライブラリの依存関係、への.libファイルを追加するために必要とされる、

まず理解を明確にすることができますDLLは動的にロードされるため、LoadLibraryを使用している場合は、DLLを追加ライブラリに追加する必要はありません。 Dllを明示的にリンクしている場合、dllパスを追加ライブラリの依存関係に与える必要はありません。

注: LoadLibraryを使用すると、GetProcAddressを使用してエクスポートされた関数を呼び出すことができるDllハンドルを取得できます。

は参照してください:遅延ロード: https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v=vs.85).aspx

関連する問題