2017-09-08 6 views
2

.libと.dllについて学ぶVS2015 .dllプロジェクトを作成しようとしましたが、明示的な使用と暗黙的な使用による混乱がありました。.libを使用してコンパイルし、.dllを使用してC++でdllをリンクするか、明示的に呼び出すか?

今、私は.dllプロジェクトを作成して正常に遵守しました。次に、test.libとtest.dllを取得しました。私のtest.hでは、機能を正しく検証するために別のプロジェクトで使用するのが良いはずですか?

  1. は "TEST.H" を含む "はexample.c" と呼ばれる.cファイルを含むWin32アプリケーションプロジェクトを作成します。

    は、ここに私の手順をです。そして私は "test.lib"をこのプロジェクトの同じディレクトリに置きました。

  2. プロジェクトをコンパイルし、リリースバージョンを取得します。
  3. "test.dll"をリリースディレクトリ
  4. にダブルクリックしてください.exeとすべてがうまくいきます。

私の大学では、自分の手続きで静的ライブラリと動的ライブラリが使われていると言いました。 "test.dll"を明示的に読み込む必要があります。実際のコードは含まれません。コンパイル時にのみ使用してください。

私が間違っている場合は、私に修正してください。ありがとう!

+0

'.lib'ファイルは2種類あります。 –

答えて

5

あなたの大学は間違っています。

ライブラリプロジェクトではインポートライブラリ(.lib)とdllが作成され、.libにリンクするとdllファイルを指すスタブに過ぎません。 .exeファイルが存在する場所から.dllファイルを削除すると、.exeファイルが開始されないはずです。したがって、.dllが必要であることを確認する方法の1つです。

Windowsの.libファイルは、静的ライブラリまたはインポートライブラリのどちらでもかまいません。

静的ライブラリ

それは、静的ライブラリの場合は、すべてのコードはの.libファイルに含まれており、あなたがコードをファイルというの.libにリンクするとき、あなたの実行可能ファイルに埋め込まれています。 DLLファイルは使用/必要ありません。

インポートライブラリ

の.libファイルがインポートライブラリである場合は、これにリンクする場合、それだけで、.dllファイルを指すスタブが含まれている、あなたの実行可能ファイルは、ライブラリのコードを埋め込むていません.dllにリンクされています。実行可能ファイルは.dllが存在することを要求し、exeが起動すると自動的にロードしようとします。

はダイナミック番目のオプションを明示的にコードの負荷の.dllを持つことである

をロードし、そして抽出/キャストすべての機能は/ etc。その名前の文字列表現を使用してdllから取得します。このメソッドを使用すると、ビルド時に.libファイルにリンクされません。このメソッドは、プラグインまたはDLLをロードする場合に便利ですが、DLLが存在しない場合でも実行可能な作業を行います。これはあなたの大学が話していることであり、おそらくこれを行う必要はありません。

+0

ありがとうございました!私は彼が多分静的ライブラリとして私の.libファイルを誤解していると思う。 – disccip

+0

あなたが多分あなたが答えを受け入れるのを助けたら –

関連する問題