2011-04-28 27 views
1

當進程內COM服務器註冊時,通常應在HKCR\CLSID\ClassId\InprocServer32下有ThreadingModel值,該值控制如何在多線程環境中使用類對象。看起來這個值不是out-proc服務器所必需的。我搜索了很多例子,其中ThreadingModel的值在HKCR\CLSID\ClassId\LocalServer32之下,並且this article也解釋了這個值是不需要的,但我不太確定我理解那裏的推理。註冊一個out-proc COM服務器時,我需要指定「ThreadingModel」嗎?

我還在我的機器上搜索了註冊表,發現相當多的課程主要由微軟提供,其中ThreadingModel也在InProcServer32下指定。

請問ThreadingModel對於一個out-proc服務器有什麼影響,或者我可以總是忽略它嗎?

回答

1

您不需要LocalServer32的ThreadingModel,因爲無論您做什麼COM都將始終在客戶端和服務器之間爲.exe COM服務器創建代理,因爲進程間調用需要代理。因此,客戶端無論服務器是在STA還是在MTA中都無關緊要。

文章的要點是,對於inproc服務器,COM將嘗試根據調用者的公寓和InProcServer32中的ThreadingModel來決定哪個公寓最適合使用,而對於outproc服務器,調用者不關心公寓所以通過從註冊表中省略ThreadingModel,COM服務器的開發人員可以通過他/她的類工廠實現來決定使用哪個公寓。

相關問題