当注册进程内COM服务器时,ThreadingModel
下的HKCR\CLSID\ClassId\InprocServer32
值通常应该控制如何在多线程环境中使用类对象。看起来out-proc服务器不需要这个值。我搜索并找到了许多示例,其中ThreadingModel
下的HKCR\CLSID\ClassId\LocalServer32
值以及this article解释了这个值是不需要的,但我不太清楚我理解那里的推理
我还搜索了我的计算机上的注册表,发现很多课程主要由Microsoft提供,其中ThreadingModel
也在InProcServer32
下指定。
ThreadingModel
会对out-proc服务器产生什么影响,还是我可以一直省略它?
答案 0 :(得分:1)
您不需要ThreadingModel for LocalServer32,因为无论您做什么,COM都将始终在.exe COM服务器的客户端和服务器之间创建代理,因为进程间调用需要代理。因此,无论服务器是在STA还是在MTA中,客户端都无关紧要。
文章的重点是,对于inproc服务器,COM将根据调用者的公寓和InProcServer32中的ThreadingModel尝试决定哪个公寓最佳使用,而对于outproc服务器,调用者不关心公寓所以通过从注册表中省略ThreadingModel,COM服务器的开发人员可以通过他/她的类工厂实现来决定使用哪个公寓。