DLL(ダイナミックライブラリ)DLL(ダイナミックライブラリ)を呼び出すDLL(ダイナミックライブラリ、ダイナミックリンクライブラリ、動的ライブラリ)を使ったアプリケーションを作成します。DLLとは、汎用性の高いプログラムを部品化して、DLLファイルとして作成されたものです。EXEファイルは、単体で実行できますが、DLLファイルは、他のアプリケーションから呼び出して使用します。DLL単体では、実行できません。今回は、lzh形式の圧縮・解凍ライブラリである、UNLHA32.DLLを使います。UNLHA32.DLLのバージョンを表示させます。アプリケーションの実行にはUNLHA32.DLLが必要です。Windowsシステムフォルダに入れてください。UNLHA32.DLLがない状態でアプリケーションを実行すると、エラーが出るようにします。流れ1.UNLHA32.DLL、UNLHA32.Hを入手します。UNLHA32.Hは、ソースファイルと同じ場所に保存してください。UNLHA32.DLLはウインドウズのシステムフォルダに入れてください。2.tchar.h、stdio.hをインクルードします。(_stprintf_s()で使用します。)3、UNLHA32.Hをインクルードします。4,DLL内の呼び出したい関数へのポインタを、typedefで定義します。ここでは、PUNLHAGETVERSION型という名称にします。型の名称は自由に決めることができます。WM_CREATE1.GetSystemDirectory()でWindowsシステムフォルダのパスを取得します。Windowsシステムフォルダは、Windowsのバージョンにより異なります。上記変数のサイズ);2.wsprintf()で、ファイル名(ここではUNLHA32.DLL)をセット。オプションの引数);3.LoadLibrary()で、DLLをロードします。LoadLibrary(TEXT("UNLHA32.DLL"))と1行にまとめても、見かけ上問題なく動作します。記述されているフォルダです。Windowsのバージョン、サービスパックにより優先順位は前後します。DLLが優先して読み込まれてしまうため、偽DLLに含まれた悪意あるコードが実行されてしまいます。これが「任意のDLL/実行ファイル読み込みに関する脆弱性」です。DLLは、必ずパスを指定するようにしましょう。4.DLLをロードできなかった場合、LoadLibrary()の戻り値がNULLになるので、エラー表示をします。5.GetProcAddress()でDLLが持つ、指定された関数(ここではUnlhaGetVersion)のアドレスを取得します。戻り値は、関数のアドレスなので、これを用意した変数(ここでは、PUNLHAGETVERSION型のfpTestFunc)にセットします。関数名);6.UNLHA32.Hで定義されている関数UnlhaGetVersion()を実行し、UNLHA32.DLLのバージョンを取得します。7._stprintf_s()で画面に表示する文字を変数(ここではlpBuffer)に保存します。8.FreeLibrary()でロードしたDLLを、メモリから開放します。DLLモジュールのハンドル);ソースコードの入力ソースコードは下記のように入れてください。ウィンドウを作成します。ウィンドウのメッセージを処理します。0;}上記の太線で示している箇所のみ追加です。ENDEND任意のDLL/実行ファイル読み込みに関する脆弱性についてDLL読み込み脆弱性対策のため、本サイトを更新いたしました。対策前よりかなり複雑なソフトウエアになりましたが、わかりやすさより、脆弱性対策を優先させました。このサイトを見てアプリケーションを作成され、配布をされている方は、修正をお願いいたします。DLL(ダイナミックライブラリ)。