2010-03-23 2 views
1

경우 대리 프로세스 또는 COM +

1 내가 대리 프로세스 내에서의 COM DLL을 호스팅하는 경우으로 CoInitialize 및 CoUninitialize를 호출 할 책임이

(중 유틸리티를 dcomcnfg를 사용하거나 COM + 마법사) ?

2 COM 개체가 포함 된 ISAPI DLL을 빌드합니까?

답변

0

사례 2에 대해서는 아무 생각이 들지 않지만 사례 1에서는 대리 프로세스가 확실하게 CoInitialize()/CoUninitialize()을 호출합니다. 내가 이것을 어떻게 알았는지.

우리는 COM +에서 호스팅하는 COM 개체를 사용하며 MS XML 4를 사용합니다. MS XML 4에서 XML 문서 개체를 만들려면 CoCreateInstance()을 호출해야합니다. 우리는 COM 객체에서 CoInitialize()을 결코 호출하지 않지만 문서 생성은 항상 성공적입니다. 확실히 대리모는 CoInitialize()을 호출합니다. 독립 실행 형 앱에서 동일한 작업을 수행하는 경우 CoInitialize()으로 전화하지 않는 한 문서 작성에 실패합니다.

그래서 결론은 다음과 같습니다. COM + 대리모 (DCOM 대리인에도 적용됩니다)는 CoInitialize()이라고 부릅니다.

Btw 사례 2를 조사 할 때 사용할 수 있습니다. CoInitialize()이 이미 호출 된 경우 ISAPI dll에 CoCreateInstance()이라고 부릅니다.

+0

답장을 보내 주셔서 감사합니다. COM + 대리인이 STA 또는 MTA에 가입하는지 여부를 알고 있습니까? – arnold

+0

@arnold : COM 객체 스레딩 모델에 따라 달라집니다. http://msdn.microsoft.com/en-us/library/ms681753(VS.85).aspx – sharptooth