Нужно ли указывать «ThreadingModel» при регистрации COM-сервера out-proc? - PullRequest
1 голос
/ 28 апреля 2011

Когда внутрипроцессный COM-сервер зарегистрирован, обычно в HKCR\CLSID\ClassId\InprocServer32 должно быть значение ThreadingModel, которое контролирует, как объект класса должен использоваться в многопоточной среде. Похоже, это значение не требуется для серверов out-proc. Я искал и нашел множество примеров, в которых значение ThreadingModel находится под HKCR\CLSID\ClassId\LocalServer32, а также эта статья , которая объясняет, что это значение не требуется, но я не совсем уверен, что понимаю причины этого.

Я также искал реестр на своей машине и обнаружил довольно много классов, в основном поставляемых Microsoft, где ThreadingModel также указано в InProcServer32.

Будет ли ThreadingModel иметь какой-либо эффект для сервера out-proc или я просто всегда буду его опускать?

1 Ответ

1 голос
/ 28 апреля 2011

Вам не нужен ThreadingModel для LocalServer32, потому что независимо от того, что вы делаете, COM всегда создает прокси между клиентом и сервером для .exe COM-серверов, потому что прокси-сервер необходим для межпроцессных вызовов.Поэтому для клиента не имеет значения, находится ли сервер в STA или в MTA.

Суть статьи в том, что для серверов inproc COM будет пытаться решить, какую квартиру лучше использовать, в зависимости от квартиры вызывающего абонента и от ThreadingModel в InProcServer32, в то время как для серверов outproc вызывающему не важноквартиру, поэтому, исключив ThreadingModel из реестра, разработчик COM-сервера может решить, какую квартиру использовать в своей реализации фабрики классов.

...