#include	<windows.h>
#include	"IconView.h"

#define		STATIC	1

//////////////////
//DLLの静的ロード
//////////////////
#ifdef STATIC
	#pragma comment(lib, ".\\Release\\IconView_DLL.lib") 
	IMPORT int GetBitmapOfIcon(char*, int);
#endif

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

	char FileName[MAX_PATH] = {0};
	OPENFILENAME ofn;				//オープンファイルダイアログ構造体
	ZeroMemory(&ofn, sizeof(ofn));	//ゼロ初期化
	ofn.lStructSize		= sizeof(ofn);
	ofn.hwndOwner		= NULL;
	ofn.lpstrFilter		= "アイコンファイル(*.ico)\0*.ico\0カーソルファイル(*.cur)\0*.cur\0\0";
	ofn.nFilterIndex	= 1;
	ofn.lpstrFile		= FileName;
	ofn.nMaxFile		= MAX_PATH;
	ofn.lpstrTitle		= "アイコン、カーソルファイルを開く";
	ofn.lpstrInitialDir = ".";
	ofn.Flags			= OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
	ofn.lpstrDefExt		= "ico";
	if(GetOpenFileName(&ofn)) {
		MessageBox(NULL, FileName, "GetOpenFileName", MB_OK);
	}
#ifdef STATIC
	MessageBox(NULL, "DLLの静的ロードです", "GetBitmapOfIcon関数", MB_OK);
	int num = GetBitmapOfIcon(FileName, IMAGE_ICON);
#endif

///////////////////////////////////////////////////////
//DLLの動的ロード
//（冒頭の"#define STATIC"をコメントアウトしてください）
///////////////////////////////////////////////////////
#ifndef STATIC
	//以下はDLLの動的呼び出し
	typedef int (*LPGETBITMAPOFICON)(char*, int);

	LPGETBITMAPOFICON lpGetBitmapOfIcon;
	HMODULE hDll = LoadLibrary("IconView_DLL.dll");
	if(!hDll) {
		MessageBox(NULL, "IconView_DLL.dllが見つかりません。", "エラー", MB_ICONWARNING);
		return 0;
	}
	lpGetBitmapOfIcon = (LPGETBITMAPOFICON)GetProcAddress(hDll, "GetBitmapOfIcon");
	if(!lpGetBitmapOfIcon) {
		MessageBox(NULL, "関数がエクスポートされていません。", "エラー", MB_ICONWARNING);
		FreeLibrary(hDll);
		return 0;
	}
	MessageBox(NULL, "DLLの動的ロードです", "GetBitmapOfIcon関数", MB_OK);
	int num = (*lpGetBitmapOfIcon)(FileName, IMAGE_ICON);
	FreeLibrary(hDll);
#endif

	wsprintf(FileName, "選択されたのは%d番目のビットマップです", num + 1);
	MessageBox(NULL, FileName, "GetBitmapOfIcon実行結果", MB_OK | MB_ICONINFORMATION);
	return 0;
}
