DLLの作り方と、DLLを呼び出すプログラムのサンプルをgithubに上げました。Visual Studio 2013 Expressがあればビルドできます。
以下の書籍を全面的に参考にしました。
- APIで学ぶWindows徹底理解 (日経BPパソコンベストムック) p102~p109
以下、解説です。
全体像
DLLを作る行為と、DLLを利用するプログラムを作る行為とが混乱しがちなので、自分の理解を図にしました。
DLLの作成
図の上段は、DLLの作成を表しています。
DllMain.cppは、DLLのエントリポイントを記述したファイルです。Windowsのお作法に従って、DLLがプロセスによってロードされたりアンロードされたりするときの処理などを記述します。今回のような単純な例においては、ほぼ何も書かなくても大丈夫なようです。
BasicMath.hとBasicMath.cppには、DLLが提供する関数の宣言と実装をそれぞれ記述しています。関数の前に_declspec(dllexport)
をつけるのがお作法のようです。
ビルドすると、DLLの他に副産物としてライブラリファイルが生成されます。
DLLの利用その1:ロード時のリンク
図の中段は、DLLを利用するプログラムの作り方その1です。この方法では、先ほど生成されたライブラリファイルをビルド時に参照して、このプログラムがどのDLLを参照するかを実行ファイルに埋め込んでしまいます。自由度は低いですがプログラミングは簡単です。
DLLの利用その2:実行時のリンク
図の下段は、DLLを利用するプログラムの作り方その2です。この方法では、どのDLLの、どの関数を利用するかを実行時に決定します。利用できるDLLに応じて処理を変えることなどが可能になります。