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。

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

服务器的线程模型 单元服务器在以下位置运行
<\not specified> 主 STA:
推送、请求和匿名 与客户端相同的单元
免费 多线程单元
中立 非特定单元

 

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

单元客户端在以下位置运行 单元服务器在以下位置运行
多线程 托管 STA
中性(在 STA 线程上) 与客户端相同的单元
中性(在 MTA 线程上) 托管 STA

 

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

对于 32 位进程内服务器,必须注册 InprocHandler32InprocServerInprocServer32Insertable 项。 需要 InprocServer 条目才能实现向后兼容。 如果缺少此条目,该类仍有效,但无法在 16 位应用程序中加载。

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

InprocServer