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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//! COM initialization helpers.
//!
//! Windows COM APIs (`CoCreateInstance`, shell interfaces like `IShellLinkW`,
//! etc.) require the calling thread to have entered a COM apartment first.
//! Shell APIs in particular expect a [Single-Threaded Apartment](https://learn.microsoft.com/en-us/windows/win32/com/single-threaded-apartments) (STA).
//!
//! [`ensure_sta`] initializes COM as STA exactly once per thread; the
//! matching `CoUninitialize` runs when the thread exits via the
//! thread-local destructor.
use ptr;
use ;
thread_local!
;
/// Initialize COM as a Single-Threaded Apartment for the current thread,
/// once. Cheap to call repeatedly — subsequent calls touch a thread-local
/// flag and return immediately.