DLLプロジェクトをコンパイルすると、出力としてDLLとLIBファイルが取得されます。 DLLには実際のライブラリコードが含まれています。 LIBファイルには、エクスポートされた関数のスタブが含まれており、リンカがそのDLLを呼び出すためのコードを生成するのを支援します。
これは、静的ライブラリをコンパイルするときに得られるLIBファイルとは非常に異なります。 その LIBファイルには、ライブラリを構成するすべてのオブジェクトコードが含まれています。そのようなコードはすべて、ビルド時に実行ファイルに直接リンクされます。したがって、名前の「静的な」部分です。
しかし、実際の使用方法は非常に似ています。ダイナミックライブラリまたはスタティックライブラリにリンクしているかどうかに関わらず、リンカを(追加の依存関係を使用して)LIBファイルに指定します。リンカーは残りを行います。それはLIBファイルから何をするべきかを伝えることができます。
もちろん、正しいLIBファイルであることを確認する必要があります。両方のプロジェクト(DLLとEXE)を同じソリューションに置くことで、プロジェクト参照を使用できるようになり、タスクを本質的に簡単にすることができます。
EDIT: DLLのエクスポート機能がない限り、DLLをビルドすると、もちろんLIBファイルは取得されません。 (関数をエクスポートしないと、そのDLLのクライアントが呼び出すためのものは何もないので、LIBファイルは必要ありません!)DLLからエクスポートされる関数を配置する最も簡単な方法は、__declspec(dllexport)
注釈。マクロと組み合わせると、コンシューマ側で__declspec(dllimport)
に解決され、DLLをビルドしてアプリケーションから消費するために同じヘッダーファイルを使用できるようになります。その答えについては、hereを参照してください。また、a DEF file with an "EXPORTS" sectionを使用することもできます。
DLLプロジェクトは* import *ライブラリを生成します。静的ライブラリと同じではなく、非常に小さく、エクスポートした関数のみを宣言します。 .libファイルがない場合は、正しくビルドしなかったか、関数をエクスポートするのを忘れてしまいました。 –
DLLプロジェクトは.dllファイルのみを作成します。 .libファイルが見つかりません – Stark