InprocServer32
註冊 32 位進程伺服器,並指定伺服器可執行之 Apartment 的線程模型。
登錄項目
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID
{CLSID}
InprocServer32
(Default) = path
ThreadingModel = value
備註
ThreadingModel 是指定 線程模型的REG_SZ 值。 下表顯示可能的值。
值 | Description |
---|---|
公寓 | 單個線程 Apartment |
兩者 | 單個線程或多線程 Apartment |
免費 | 多線程公寓 |
中性 | 中性公寓 |
您必須針對同進程伺服器所提供的每個物件使用相同的值。
如果 ThreadingModel 不存在或未設定為值,伺服器就會載入至進程中初始化的第一個 Apartment。 這個公寓有時被稱為主要的單個線程公寓(STA)。 如果程式中的第一個STA是由 COM 初始化,而不是透過明確呼叫 CoInitialize 或 CoInitializeEx,它稱為主機 STA。 例如,如果要載入進程內伺服器需要 STA,但進程中目前沒有 STA,COM 就會建立主機 STA。
盡可能將同一部同一部 Apartment 載入同一部同一部同進程伺服器,以載入該伺服器。 如果用戶端 Apartment 的線程模型與指定的模型不相容,則會載入伺服器,如下表所示。
伺服器的線程模型 | Apartment 伺服器是在 中執行 |
---|---|
<未指定> | 主要 STA |
兩者 | 與用戶端相同的 Apartment |
免費 | 多線程公寓 |
中性 | 中性公寓 |
如果伺服器的線程模型是 Apartment,伺服器載入中的 Apartment 取決於客戶端執行中的 Apartment,如下表所示。
Apartment 用戶端是在 中執行 | Apartment 伺服器是在 中執行 |
---|---|
多線程 | 主機 STA |
中性 (在 STA 線程上) | 與用戶端相同的 Apartment |
中性 (在 MTA 線程上) | 主機 STA |
COM 也可以建立主機多線程 Apartment (MTA)。 如果單個線程 Apartment 中的用戶端要求進程內伺服器,其線程模型在進程中沒有 MTA 時為 Free,COM 會建立主機 MTA 並將伺服器載入其中。
針對 32 位進程伺服器,必須註冊 InprocHandler32、InprocServer、InprocServer32 和 Insertable 索引鍵。 只有回溯相容性才需要 InprocServer 專案。 如果遺失,類別仍可運作,但無法在16位應用程式中載入。
如果容器正在搜尋同進程伺服器登錄,則16位版本具有16位容器的優先順序,而32位版本具有32位容器的優先順序。
相關主題