Introduction

Microsoft Learn (旧 MSDN) における、各 API の説明でどの Windows のビルドバージョンで使えるのかの記載がない件。

BuildError

当たり前の話なのだが、UWP はこのあたりの条件が重要で、 WindowsTargetPlatformVersionWindowsTargetPlatformMinVersion で制御する必要がある。
実際、どの API が使えるかはビルドしてみてわかる、というパターン。

この事象で発狂したのは onnxruntime を 10.0.18362.0 向けにビルドしようとして、 SetThreadGroupAffinity の定義がない、とコンパイラに怒られたからである。

What happened?

掲題のターゲットバージョンで下記の 2 つのヘッダーファイルを比較してみる。

  • C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\processtopologyapi.h
  • C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um\processtopologyapi.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
+ #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES)

#if (_WIN32_WINNT >= 0x0601)

WINBASEAPI
BOOL
WINAPI
GetThreadGroupAffinity(
_In_ HANDLE hThread,
_Out_ PGROUP_AFFINITY GroupAffinity
);


WINBASEAPI
BOOL
WINAPI
SetThreadGroupAffinity(
_In_ HANDLE hThread,
_In_ CONST GROUP_AFFINITY* GroupAffinity,
_Out_opt_ PGROUP_AFFINITY PreviousGroupAffinity
);


#endif // (_WIN32_WINNT >= 0x0601)

- #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
+ #endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES)

このような感じで、UWP 対応が追加されている。

お願いだから、API の説明に使えるバージョンの詳細情報を追加して欲しい。