, . , , - . , , ( Windows) . , . , . , , . ( ), , . (apartment)1. , . : , , . , , .
, ; . , , ; , . , , , , ; , , . .
. , . , (TLS - thread local storage), , . , . , , , , , , . HRESULT (RPC_E_WRONG_THREAD), . , , HRESULT; .
Windows NT 4.0 : ( - multithreaded apartments) (STA - singlethreaded apartments). ; STA. , , STA . , - STA; , , STA, , , - . (affinity) TLS (thread local storage), (locks), ( , Win32 (mutexes)).
, , , . STA , , , . , . , , , . , STA . (coarse-grained) , , STA.
, , , (RTA - rentalthreaded apartment). , RTA . , , RTA, (apartment-wide lock) ( ), . , RTA, . RTA , , . RTA , , . STA , RTA , ; RTA , , . RTA , STA, , RTA . RTA . SDK.
CreateProcess CreateThread, . , - API- .
Windows NT 5.0 . SDK.
HRESULT CoinitializeEx(void *pvReserved, DWORD dwFlags); HRESULT Coinitialize(void *pvReserved); HRESULT OleInitialize(vo1d *pvReserved);
API- .
CoInitializeEx API- , . , COINIT_MULTITHREADED:
HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);
STA COINIT_APARTMENTTHREADED:
HRESULT hr = CoInitializeEx(0, COINIT_APARTMENTTHREADED);
, CoInitializeEx COINIT_MULTITHREADED, . , CoIniti lizeEx COINIT_APARTMENTTHREADED, , . CoInitialize , CoInitializeEx COINIT_APARTMENTTHREADED. Olelnitialize CoInitialize, OLE- , OLE Drag and Drop OLE Clipboard. , CoInitialize CoInitializeEx.
API- . S_ . S_FALSE. CoInitialize CoInitializeEx CoUninitialize. OleInitialize OleUninitialize. (uninitialization) :
void CoUninitialize(void); void OleUninitialize(void);
, . , CoIniti lizeEx. HRESULT RPC_E_CHANGED_MODE. , CoUninitialize, CoInitializeEx.
1 , (execution context).