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

#define		STATIC	1

//////////////////
//DLLの静的ロード
//////////////////
#ifdef STATIC
	#pragma comment(lib, ".\\Debug\\FileList.lib") 
	IMPORT char* GetFileList(char*, char*, char*, char*);
#endif

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

#ifdef STATIC
	MessageBox(NULL, "DLLの静的ロードです", "GetBitmapOfIcon関数", MB_OK);
	char* cp = GetFileList("プレイリストファイル(*.plf)\0*.plf\0\0",
							"ビデオファイル(*.avi;*.mp4;*.mov)\0*.avi;*.mp4;*.mov\0オーディオファイル(*.mp3;*.wav;)\0*.mp3;*.wav\0\0",
							"C:\\Users\\ysama\\Programing\\Borland C++\\DirectShow\\Debug\\FileList",
							"plf");

	MessageBox(NULL, cp, "GetFileName実行結果(戻り値)", MB_OK | MB_ICONINFORMATION);
#endif

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

	LPGETFILELIST lpGetFileList;
	HMODULE hDll = LoadLibrary("FileList.dll");
	if(!hDll) {
		MessageBox(NULL, "FileList.dllが見つかりません。", "エラー", MB_OK | MB_ICONWARNING);
		return 0;
	}
	lpGetFileList = (LPGETFILELIST)GetProcAddress(hDll, "GetFileList");
	if(!lpGetFileList) {
		MessageBox(NULL, "関数がエクスポートされていません。", "エラー", MB_OK | MB_ICONWARNING);
		FreeLibrary(hDll);
		return 0;
	}
	MessageBox(NULL, "DLLの動的ロードです", "GetFileName関数", MB_OK);
	char* cp = (*lpGetFileList)("プレイリストファイル(*.plf)\0*.plf\0\0",
							"ビデオファイル(*.avi;*.mp4;*.mov)\0*.avi;*.mp4;*.mov\0オーディオファイル(*.mp3;*.wav;)\0*.mp3;*.wav\0\0",
							"C:\\Users\\ysama\\Programing\\Borland C++\\DirectShow\\Debug\\FileList",
							"plf");
	//DLLが解放される前にファイル名を保存しておく必要がある
	char fn[MAX_PATH];
	lstrcpy(fn, cp);
	cp = fn;
	MessageBox(NULL, cp, "GetFileName実行結果(戻り値)", MB_OK | MB_ICONINFORMATION);
	if(FreeLibrary(hDll)) {
		MessageBox(NULL, "FreeLiabrary関数成功", "通知", MB_OK | MB_ICONINFORMATION);
	}
	else
		MessageBox(NULL, "FreeLiabrary関数失敗", "通知", MB_OK | MB_ICONINFORMATION);
#endif

	return 0;
}
