2009-10-29 6 views
3

새 ATL 프로젝트를 만들고 Apartment 스레딩 모델을 사용하는 간단한 COM 개체 (참고 : 개체가 아니라 컨트롤)를 추가하면 메시지 펌프가 실행됩니까? 내 COM 개체 클래스의 멤버 인 숨겨진 창을 만들고 싶지만 실제로 메시지를 전달할 것인지 확실하지 않습니다. 이것은 뒤에서 다루어 지거나 COM 개체를 실제로 생성하는 응용 프로그램의 종류가 중요합니까?ATL COM 개체에 메시지 펌프가 있습니까?

+0

단일 스레드 아파트는 어딘가에 (구현 세부 사항으로) 하나를 만들고, 다중 스레드 아파트는 동기화 작업을 귀하에게 맡깁니다. –

답변

4

아니요, 아니요, ATL COM 개체는 기본적으로 메시지 펌프를 구현하지 않습니다. 귀하의 코드는 일반 Windowing 라이브러리 또는 명시 적 메시지 펌프 구현을 통해 on을 명시 적으로 사용해야합니다.

+0

감사합니다. ATL (및 COM) 내부에 대해 더 알지 못하면 구현이 어려울 것이라고 생각합니다. – Rob

+0

@Rob 여기에서는 ATL 또는 COM 내부를 이해할 필요가 없습니다. 표준 Win32 메시지 펌프는 훌륭하게 작동합니다. – JaredPar

+0

하지만이 메시지 펌프의 코드는 어디에 있습니까? DLLMain? – Rob

0

COM은 COM 개체가 appartment에있는 경우 필요에 따라 COM 개체와 통신하기 위해 메시지 펌프를 사용합니다. 메서드가 다른 appartment (STA 또는 MTA)의 객체에 의해 호출 될 때 객체에서 안전하게 호출되는 방법입니다 (메시지 대기열에 의해 직렬화 됨).

메시지 펌프를 사용할 수 없습니다. COM은 필요시에만 함께 표시합니다. 디버깅 할 때 객체의 메서드를 직접 호출한다는 것을 알 수 있습니다. 메시지 펌프를 통해 뛰어 넘지는 않습니다. 물론 당신이 다른 아파트에 살고있는 여러 물건을 모으고 있다면 당신은 될 것입니다.

창이 필요한 경우 표준 방법을 사용하여 창을 만들 수 있습니다. ATL은 CWindow 및 CWindowImpl과 같은 간단한 Windows 클래스를 제공하므로이를 쉽게 수행 할 수 있습니다.

관련 문제