DLLの作成(3)


DLLの作成方法
  1. DLLプロジェクトを生成する
    VC++の「ファイル」−「新規作成」メニューで新規作成ダイアログを開き、 「プロジェクト」タブを選択する。 「Win32 Dynamic-Link Library」を選択し、プロジェクト名を「TestDLL」としてOKボタンを押す。
    次の画面では「単純なDLLプロジェクト」を選択しOKボタンを押す。これでプロジェクトのスケルトンが完成する。

  2. 関数を追加する
    ここでは、例としてメッセージボックスを表示する関数を追加してみる。 まず、stdafx.hファイルを開いて以下のように関数のプロトタイプを追加する。
    	// stdafx.hファイルでの記述 --------------------
    	・・・・・・
    	#include <windows.h>
    
    	// TODO: プログラムで必要なヘッダー参照を追加してください。
    	extern "C" __declspec(dllexport) void DisplayMessage(LPCTSTR lpszMessage);
    
    次に、TestDLL.cppファイルにこの関数の実装を追加する。
    	extern "C" __declspec(dllexport) void DisplayMessage(LPCTSTR lpszMessage)
    	{
    		::MessageBox(NULL, lpszMessage, "test", MB_OK);
    	}
    
  3. これでビルドすれば、TestDLL.dllは完成である。

作成したDLLを使う
  1. プロジェクトを作成する。「Win32 Application」を選択し、プロジェクト名をTestDLLEXEとする。 次の画面では「単純なアプリケーション」を選択しOKボタンを押す。これでプロジェクトのスケルトンが完成する。

  2. ソースファイルの記述
    TestDLLEXE.cppを開き、以下のように記述する。
    LoadLibrary関数の引数では先に作成したTestDLL.dllへのパスを指定すること。
    	#include "stdafx.h"
    
    	// エクスポートされた関数と同じ型を定義する
    	typedef void (*DISPLAYMESSAGE)(LPCTSTR);
    
    	int APIENTRY WinMain(HINSTANCE hInstance,
    	                     HINSTANCE hPrevInstance,
    	                     LPSTR     lpCmdLine,
    	                     int       nCmdShow )
    	{
    		// TODO: この位置にコードを記述してください。
    
    		HINSTANCE hDllInstance;
    		DISPLAYMESSAGE DisplayMessage;	// 関数アドレス
    
    		// DLLを呼び出し側プロセスのアドレス空間内にマップする
    		hDllInstance = ::LoadLibrary("..\\TestDLL\\Debug\\TestDLL.dll");
    
    		if( hDllInstance != NULL )
    		{
    			// エクスポートされた関数のアドレスを取得
    			DisplayMessage =
    				(DISPLAYMESSAGE)(::GetProcAddress(hDllInstance, "DisplayMessage"));
    			if( DisplayMessage != NULL )
    				DisplayMessage("Hello!!");
    		}
    
    		……
    		FreeLibrary(hDllInstance);
    
    		return 0;
    	}
    
  3. プログラムの実行
    ビルドして生成されたTestDLLEXE.exeを実行し、 「Hello!!」というメッセージボックスが表示されれば成功である。

目次へ