2011-04-28 3 views
1

in-proc COM 서버를 등록 할 때 일반적으로 값이 HKCR\CLSID\ClassId\InprocServer32 이하 여야합니다.이 값은 클래스 개체가 다중 스레드 환경에서 사용되는 방법을 제어합니다. out-proc 서버에는이 값이 필요하지 않은 것처럼 보입니다. 나는이 예제에서 많은 수의 예제를 발견했다.이 값은 필요하지 않지만 아래에 있고 this article이라는 값은 설명되어있다. 그러나 나는 그 이유를 이해하고 있지는 않다.out-proc COM 서버를 등록 할 때 "ThreadingModel"을 지정해야합니까?

또한 컴퓨터에서 레지스트리를 검색하여 대부분 ThreadingModel이 (가) InProcServer32 아래에 지정된 Microsoft에서 주로 배송되는 클래스를 많이 발견했습니다.

ThreadingModel은 out-proc 서버에 영향을 미칩니 까? 아니면 항상 생략 할 수 있습니까?

답변

1

LocalServer32에 ThreadingModel이 필요하지 않습니다. COM을 수행 할 때마다 프로세스 간 호출에 프록시가 필요하기 때문에 COM과 .exe COM 서버간에 항상 프록시가 만들어지기 때문입니다. 따라서 서버가 STA에 있는지 또는 MTA에 있는지 여부는 클라이언트에게 중요하지 않습니다.

기사의 요점은 inproc 서버의 경우 COM은 호출자의 아파트와 InProcServer32의 ThreadingModel에 따라 사용할 아파트를 결정하려고 시도하지만 outproc 서버의 경우 호출자는 아파트에 대해 신경 쓰지 않습니다 따라서 레지스트리에서 ThreadingModel을 생략함으로써 COM 서버의 개발자는 클래스 팩토리 구현을 통해 사용할 아파트를 결정할 수 있습니다.

관련 문제