#include "app.h"
#if     (_MSC_VER > 1200)	//Visual C++ .NETならば…
/*--------------------------------------------------------------------------*/
//C:\Program Files (x86)\Windows Kits\10\Source\10.0.10240.0\ucrt\startup\assert.cpp
extern "C" void __cdecl _assert(char const* const expression, char const* const file_name, unsigned const line_number) {	//assert.cpp内の関数がprintf系の関数をインライン展開で使用しており、clipprnt.objの実装と衝突してしまう。そうならないように、assert.cpp内のグローバル関数を置き換える。
	__asm int 3;
}
extern "C" void __cdecl _wassert(wchar_t const* const expression, wchar_t const* const file_name, unsigned const line_number) {	//同上
	__asm int 3;
}
/*--------------------------------------------------------------------------*/
//C:\Program Files (x86)\Windows Kits\10\Source\10.0.10240.0\ucrt\string\strnlen.cpp
extern "C" size_t __cdecl wcsnlen(wchar_t const* const string, size_t const maximum_count) {	//呼び出し元が多くて特定できなかった。これを定義しておかないとstrnlen.cppがリンクされてしまう。
	DIE();
}
/*--------------------------------------------------------------------------*/
//C:\Program Files (x86)\Windows Kits\10\Source\10.0.10240.0\ucrt\convert\tolower_toupper.cpp
extern "C" int __cdecl _tolower_l(int const c, _locale_t const locale) {	//C:\Program Files (x86)\Windows Kits\10\Source\10.0.10240.0\ucrt\string\memicmp.cpp等から呼ばれている。これを定義しておかないとtolower_toupper.cppがリンクされてしまう。
	return tolower(c);
}
extern "C" int __cdecl _toupper_l(int const c, _locale_t const locale) {	//これは必須ではありません。
	return toupper(c);
}
/*--------------------------------------------------------------------------*/
//C:\Program Files (x86)\Microsoft Visual Studio\VC98\CRT\SRC\VSPRINTF.C
extern "C" int __cdecl _vsnprintf(char* string, size_t count, const char* format, va_list ap) {	//Boehm GCが_vsnprintf()を使っている。_vsnprintf()はVC++6.0には有るがVC++2015には無い。
	return vsnprintf(string, count, format, ap);
}
/*--------------------------------------------------------------------------*/
#endif//(_MSC_VER > 1200)
