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 位進程伺服器,必須註冊 InprocHandler32InprocServer、InprocServer32 Insertable 索引鍵。 只有回溯相容性才需要 InprocServer 專案。 如果遺失,類別仍可運作,但無法在16位應用程式中載入。

如果容器正在搜尋同進程伺服器登錄,則16位版本具有16位容器的優先順序,而32位版本具有32位容器的優先順序。

InprocServer