InprocServer32

注册 32 位进程内服务器并指定服务器可以运行的公寓的线程模型。

注册表项

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID
   {CLSID}
      InprocServer32
         (Default) = path
         ThreadingModel = value

言论

ThreadingModel 是指定线程模型的 REG_SZ 值。 下表显示了可能的值。

价值 描述
公寓 单线程单元
单线程或多线程单元
自由 多线程单元
中性 中性公寓

 

必须为进程内服务器提供的每个对象使用相同的值。

如果 ThreadingModel 不存在或未设置为值,则服务器将加载到进程中初始化的第一个单元中。 此公寓有时称为主单线程公寓(STA)。 如果进程中的第一个 STA 由 COM 初始化,而不是通过显式调用 CoInitializeCoInitializeEx,则它称为主机 STA。 例如,如果要加载的进程内服务器需要 STA,则 COM 会创建主机 STA,但目前进程中没有 STA。

尽可能将进程内服务器加载到与加载它的客户端相同的单元中。 如果客户端单元的线程模型与指定的模型不兼容,则会按下表所示加载服务器。

服务器的线程模型 单元服务器在
指定的><\n 主 STA
与客户端相同的单元
自由 多线程单元
中性 中性公寓

 

如果服务器的线程模型为“单元”,则服务器加载到的公寓取决于客户端正在运行的公寓,如下表所示。

单元客户端在 单元服务器在
多线程 主机 STA
中性 (在 STA 线程上) 与客户端相同的单元
中性 (在 MTA 线程上) 主机 STA

 

COM 还可以创建主机多线程单元(MTA)。 如果单线程单元中的客户端在进程内没有 MTA 时请求进程内服务器,则 COM 将创建主机 MTA 并将服务器加载到其中。

对于 32 位进程内服务器,必须注册 InprocHandler32InprocServerInprocServer32以及 可插入 密钥。 InprocServer 条目仅用于向后兼容性。 如果缺少该类,该类仍有效,但无法在 16 位应用程序中加载。

如果容器正在搜索进程内服务器的注册表,则 16 位版本具有 16 位容器的优先级,32 位版本具有 32 位容器的优先级。

InprocServer