InprocServer32
注册 32 位进程内服务器并指定服务器可以运行的公寓的线程模型。
注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID
{CLSID}
InprocServer32
(Default) = path
ThreadingModel = value
言论
ThreadingModel 是指定线程模型的 REG_SZ 值。 下表显示了可能的值。
价值 | 描述 |
---|---|
公寓 | 单线程单元 |
双 | 单线程或多线程单元 |
自由 | 多线程单元 |
中性 | 中性公寓 |
必须为进程内服务器提供的每个对象使用相同的值。
如果 ThreadingModel 不存在或未设置为值,则服务器将加载到进程中初始化的第一个单元中。 此公寓有时称为主单线程公寓(STA)。 如果进程中的第一个 STA 由 COM 初始化,而不是通过显式调用 CoInitialize 或 CoInitializeEx,则它称为主机 STA。 例如,如果要加载的进程内服务器需要 STA,则 COM 会创建主机 STA,但目前进程中没有 STA。
尽可能将进程内服务器加载到与加载它的客户端相同的单元中。 如果客户端单元的线程模型与指定的模型不兼容,则会按下表所示加载服务器。
服务器的线程模型 | 单元服务器在 |
---|---|
指定的><\n | 主 STA |
双 | 与客户端相同的单元 |
自由 | 多线程单元 |
中性 | 中性公寓 |
如果服务器的线程模型为“单元”,则服务器加载到的公寓取决于客户端正在运行的公寓,如下表所示。
单元客户端在 | 单元服务器在 |
---|---|
多线程 | 主机 STA |
中性 (在 STA 线程上) | 与客户端相同的单元 |
中性 (在 MTA 线程上) | 主机 STA |
COM 还可以创建主机多线程单元(MTA)。 如果单线程单元中的客户端在进程内没有 MTA 时请求进程内服务器,则 COM 将创建主机 MTA 并将服务器加载到其中。
对于 32 位进程内服务器,必须注册 InprocHandler32、InprocServer、InprocServer32以及 可插入 密钥。 InprocServer 条目仅用于向后兼容性。 如果缺少该类,该类仍有效,但无法在 16 位应用程序中加载。
如果容器正在搜索进程内服务器的注册表,则 16 位版本具有 16 位容器的优先级,32 位版本具有 32 位容器的优先级。
相关主题