2011-03-23 3 views
2

ATL COM 서버 DLL 크로스 스레드 COM 호출을 보여주는 코드 샘플을 찾고 있어요. 하나 알고있어?호출 (마샬링) ATL 샘플 작업자 스레드에서 아파트 스레드 COM 인터페이스

자세한 내용 :

내 구성 요소가 백그라운드 스레드에서 작업을 할 필요가있는 IE 브라우저 도우미 개체입니다. IE의 메인 스레드에서 호출 된 객체의 메서드 중 하나에서 IE는 IE DOM (IHtmlWindow2)에 대한 포인터를 제공하고이를 로컬 멤버 변수에 저장합니다.

이제 막 방금 저장 한 COM 인터페이스 포인터에서 비동기 적으로 메서드를 호출 할 수있는 작업자 스레드를 만들고 싶습니다.

중요한 점은 내 작업자 스레드에서 호출을 시도 할 때 IE (및 내 코드)가 제어 할 수 있도록 IE에서 인터페이스 포인터가있는 메서드에서 돌아온 후에 내 호출이 발생한다는 것입니다.

내 구성 요소와 호스트 응용 프로그램 모두 아파트 스레드입니다.

누구나 이것이 어떻게 수행되는지 보여주는 훌륭한 C++ 샘플을 알고 계십니까?

내가 특별히 짧은, 간단한 예제를 찾고 있어요 (및 되지 관련 문서 단지 포인터) 내가 this question과 그 답변을 읽고 난에해야 할 것입니다 학습의 양에 겁을 얻었 기 때문에 처음부터 구현을 작성하십시오. 누군가 코드를 작성하기 전에 Don Box 북을 읽을 것을 권유 할 때, 당신은 길고 혼란스러운 밤을 보내고 있다는 것을 알고 있습니다. :-)

답변

2

그것은 COM에서 자동으로 처리되므로 아파트 요구 사항을 처리합니다. 인터페이스 포인터에 STA 유사성이 있으면 호출을 마샬링합니다. 스레드에서 사용하기 전에 인터페이스 포인터를 마샬링해야합니다. ATL에는 AtlMarshalPtrInProc() 및 AtlUnmarshalPtr() 도우미 메서드가있어이를 쉽게 수행 할 수 있습니다. CoMarshalInterThreadInterfaceInStream() 또는 IGlobalInterfaceTable을 직접 처리해야합니다.

관련 문제