Visual C++ 2015 RC と VC++ 2013 Update 5を試してみましたが、両方とも PPL を使用すると Windows 2000で実行するとクラッシュするようです(Win7などで互換モードを試すとクラッシュします)
void ResourceManager::RetrieveSystemVersionInformation() { // Determine the OS version #if (defined(_ONECORE) || defined(_KERNELX)) // MSDK and _KERNELX support is in Windows 8 (or later) s_version = ::Concurrency::IResourceManager::Win8OrLater; #elif (defined(_M_IX86) || defined(_M_X64)) OSVERSIONINFOW osvi; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);
// Fix for warnings as errors when building against WinBlue build 9444.0.130614-1739 // warning C4996: 'GetVersionExW': was declared deprecated // externalapis\windows\8.1\sdk\inc\sysinfoapi.h(442) // Deprecated. Use VerifyVersionInfo* or IsWindows* macros from VersionHelpers. #pragma warning( disable : 4996 ) if( !GetVersionExW(&osvi)) { throw ::Concurrency::unsupported_os(); } #pragma warning( default : 4996 )
switch (osvi.dwMajorVersion) { case 5: switch (osvi.dwMinorVersion) { case 2: // Win2k3 or XP-64 s_version = ::Concurrency::IResourceManager::Win2k3; break; case 1: // XP s_version = ::Concurrency::IResourceManager::XP; break; case 0: // Win2k -- unsupported s_version = ::Concurrency::IResourceManager::UnsupportedOS; throw ::Concurrency::unsupported_os(); break; } break; case 6: // Vista switch (osvi.dwMinorVersion) { case 0: s_version = ::Concurrency::IResourceManager::Vista; break; case 1: s_version = ::Concurrency::IResourceManager::Win7OrLater; break; default: s_version = ::Concurrency::IResourceManager::Win8OrLater; break; } break;
default: s_version = ::Concurrency::IResourceManager::Win8OrLater; break; } #else // !(defined(_M_IX86) || defined(_M_X64)) s_version = ::Concurrency::IResourceManager::Win8OrLater; #endif // !(defined(_M_IX86) || defined(_M_X64))
// Initialize other information based on the OS version |
該当するライブラリは concrt140.dll および、libconcrt.lib /libconcrt1.lib
Windows 2000で動くアプリが VC++2015 で作れるならまだ意味がわかりますが、
動かないのに、Windows 7や 8で 互換モードで動かしたらクラッシュするとか意味がわかりません
|・ω・) 。o ( 改造版 Windows 2000への嫌がらせなのか? )
ちなみに、XPだと判定されると Core 変数がNULLになって affinity が役割を持たなくなるようです。
2003と処理が違うんですね?
Comments