注册out-proc COM服务器时是否需要指定“ThreadingModel”?

时间:2011-04-28 07:43:03

标签: windows com com-interop

当注册进程内COM服务器时,ThreadingModel下的HKCR\CLSID\ClassId\InprocServer32值通常应该控制如何在多线程环境中使用类对象。看起来out-proc服务器不需要这个值。我搜索并找到了许多示例,其中ThreadingModel下的HKCR\CLSID\ClassId\LocalServer32值以及this article解释了这个值是不需要的,但我不太清楚我理解那里的推理

我还搜索了我的计算机上的注册表,发现很多课程主要由Microsoft提供,其中ThreadingModel也在InProcServer32下指定。

ThreadingModel会对out-proc服务器产生什么影响,还是我可以一直省略它?

1 个答案:

答案 0 :(得分:1)

您不需要ThreadingModel for LocalServer32,因为无论您做什么,COM都将始终在.exe COM服务器的客户端和服务器之间创建代理,因为进程间调用需要代理。因此,无论服务器是在STA还是在MTA中,客户端都无关紧要。

文章的重点是,对于inproc服务器,COM将根据调用者的公寓和InProcServer32中的ThreadingModel尝试决定哪个公寓最佳使用,而对于outproc服务器,调用者不关心公寓所以通过从注册表中省略ThreadingModel,COM服务器的开发人员可以通过他/她的类工厂实现来决定使用哪个公寓。