2009-11-16 4 views
4

인터페이스가있는 activex/COM 개체로 만들 필요가있는 일부 MFC 코드 (사용자 지정 CWnd 컨트롤과 일부 클래스가 있음)가 있습니다. MFC를 지원하는 ATL 프로젝트를 만들고 ActiveX를 그런 식으로 만들거나 MFC ActiveX 컨트롤을 만드는 것이 더 쉬운가?MFC COM 또는 ATL COM (ActiveX)

activeX 컨트롤을 수행 할 때, 이중 인터페이스 (예 : Microsoft의 ACDual에서 설명한 것과 같음)가 좋거나 나쁨/아무런 차이가 없습니까?

답변

1

MFC는 COM 항목의 초보자라면 쉽게 사용할 수 있습니다. 마법사가 더 유용하고 유용합니다. 하지만 ATL보다 유연성이 떨어집니다. 구현할 수있는 simpole 인터페이스가 두 개있는 경우 문제가되지 않습니다.

또한 IIRC MFC는 이중 인터페이스를 지원하지 않습니다. 이중 인터페이스는 2 가지 경우에 흥미 롭습니다. - 성능이 문제입니다. 짧은 메서드 호출로 수백만 번 실행됩니다. - 개체 사용자는 C++로 프로그래밍됩니다. 네이티브 인터페이스를 호출하는 것은 자동화 인터페이스를 호출하는 것보다 C++에서 쉬운 방법입니다.

결론적으로 듀얼 인터페이스는 멋지지만 실제로 무료로 사용할 수있는 경우에만 흥미 롭습니다. 즉,이를 지원하는 프레임 워크를 사용한다는 의미입니다. COM 기반 작업을 계획하고 있다면 ATL 및 심층 COM 지식을 조사하는 것이 흥미 롭습니다. 몇 가지 간단한 MFC 기반 개체를 제공해야한다면 MFC를 사용하십시오.

1

COM 용 MFC를 사용하는 데 약간의 고통이 있습니다. - 복사 할 매크로가 너무 많습니다. 그러나 MFC와 ATL을 혼합하는 경우 현혹 될 수 있으므로 비슷한 것을 알고 있어야합니다. 아직은 다르다. 특히 ATL로 윈도우를 만들면 더욱 그렇다.

중요한 것은 ATL에서 MFC를 사용하는 경우 AFX_MANAGE_STATE (AfxGetStaticModuleState())를 사용하여 ATL 메서드를 모두 시작해야하며, 그렇지 않으면 임의의 문제가 발생합니다. 이 작업은 COM을 MFC와 함께 구현할 때 자동으로 수행되므로 모든 메서드에 이러한 못생긴 METHOD_MANAGE_STATE 매크로가있는 것입니다.

다음은 작동합니다. ATL 개체 내의 MFC 개체는 내가하는 일입니다.

+0

내 mfc 프로젝트에 ATL 지원을 추가 한 다음 ATL ActiveX 개체를 추가하면 어떻게 할 수 있습니까? Atl ActiveX에서 내 사용자 지정 cwnd를 어떻게 래핑 할 수 있습니까 ?? CWnd :: create는 부모를 원한다. CWnd * .. 부모는 COleControl (CWnd)이 될 것이다 .. ATL의 activex는 CWindow에서 파생된다. – BabelFish

1

저는 항상 COM 구성 요소 개발을 위해 MFC가없는 직선 ATL을 사용했습니다. MFC는 일반적으로 경량 (비 UI) COM 구성 요소에는 필요하지 않은 응용 프로그램 프레임 워크로 유용합니다. ATL은 모든 공용 API 호출에서 컨텍스트를 설정하는 등의 작업을 통해 발생하는 병목 현상과 함께 모든 MFC를 가져올 필요없이 문자열, 콜렉션 및 다양한 유틸리티 클래스에 대한 많은 지원을 제공합니다. 또한 UI 구성 요소를 작성하는 경우 CWindow 및 그 친구들을 통한 기본 UI 지원이 포함됩니다.

관련 문제