//
// dllmain
// DLL がロードされた時にパスを取得する
//

// system include
#include <Windows.h>
#include <tchar.h>

// user include
#include "tstring.h"

//
// for debug
//
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
static class CRTDBG {
public:
	CRTDBG() { _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG); };
} crtinit;

// global value
std::tstring strDllPath;	// dll のパス

//****************************************************************************************************************
// Dllが呼び出された時に実行されるエントリポイント
//****************************************************************************************************************
//
// パスを取得し、設定ファイル名を作る
//
BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD dwReason, LPVOID lpReserved)
{
	TCHAR szModuleFileName[_MAX_PATH] = _T("");	 // dll のフルパス名

	switch (dwReason) {

	case DLL_PROCESS_ATTACH: // DLLがプロセスのアドレス空間にマッピングされた。

		_tsetlocale(LC_ALL, _T("japanese"));

		GetModuleFileName((HMODULE)hinstDll, szModuleFileName, _MAX_PATH);	// DLLのフルパスパス取得
		strDllPath = szModuleFileName;
		strDllPath.erase((strDllPath.begin() + strDllPath.rfind(_T("\\")) + 1), strDllPath.end());	// ディレクトリ部分だけ抜き取る
		break;

	case DLL_THREAD_ATTACH: // スレッドが作成されようとしている。
		break;

	case DLL_THREAD_DETACH: // スレッドが破棄されようとしている。
		break;

	case DLL_PROCESS_DETACH: // DLLのマッピングが解除されようとしている。
		break;

	}

	return TRUE;
}
