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

#define		STATIC	1

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

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) {

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

	MessageBoxW(NULL, cp, L"GetFileList実行結果(戻り値)", MB_OK | MB_ICONINFORMATION);
#endif

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

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

	return 0;
}
